Codeforces Round #700 (Div. 2) C. Searching Local Minimum(二分)
作者:互联网
有最多 100 次询问,在 100 次询问之内,找到一个数 a[i] ,其中 a[i-1]>a[i]<a[i+1],当然一共有 n 个数,且这个数列为长度为 n 的排列
二分查找一个区间 [l.r] 使得 a[l]>a[l-1] 并且 a[r]<a[r+1],如果中间 mid 位置 a[mid]>a[mid+1] ,那么 l 变为 mid+1,反之 r=mid
const int N=1e6+5;
int n,m,t;
int i,j,k;
int a[N];
void get(int x)
{
if(x<1 || x>n || a[x]) return ;
printf("? %d\n",x);
fflush(stdout);
sd(a[x]);
}
int main()
{
//IOS;
sd(n);
int l=1,r=n;
while(r>l){
int mid=l+r>>1;
get(mid);
get(mid+1);
if(a[mid]>a[mid+1]) l=mid+1;
else r=mid;
}
printf("! %d\n",l);
PAUSE;
}
标签:Codeforces,get,int,700,mid,Searching,printf,100,sd 来源: https://blog.csdn.net/C_Dreamy/article/details/113756935