AcWing 789. 数的范围
Posted MangataTS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing 789. 数的范围相关的知识,希望对你有一定的参考价值。
题目链接
https://www.acwing.com/problem/content/791/
思路
写一个划分x为左边界和有边界的整数二分方法即可
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000009
#define endl "\\n"
#define PII pair<int,int>
ll ksm(ll a,ll b)
ll ans = 1;
for(;b;b>>=1LL)
if(b & 1) ans = ans * a % mod;
a = a * a % mod;
return ans;
ll lowbit(ll x)return -x & x;
const int N = 2e6+10;
int n,q,a[N];
// 区间[l, r]被划分成[l, mid - 1]和[mid, r]
int findR(int l,int r,int x)
while(l < r)
int mid = l + r + 1 >> 1;
if(a[mid] <= x) l = mid;
else r = mid - 1;
return r;
// 区间[l, r]被划分成[l, mid]和[mid + 1, r]
int findL(int l,int r,int x)
while(l < r)
int mid = l + r >> 1;
if(a[mid] >= x) r = mid;
else l = mid + 1;
return r;
int main()
scanf("%d%d",&n,&q);
for(int i = 0;i < n; ++i)
scanf("%d",&a[i]);
int x;
while(q--)
scanf("%d",&x);
int k = findL(0,n-1,x);
if(a[k] != x)
printf("-1 -1\\n");
continue;
printf("%d ",k);
k = findR(0,n-1,x);
printf("%d\\n",k);
return 0;
以上是关于AcWing 789. 数的范围的主要内容,如果未能解决你的问题,请参考以下文章