其他分享
首页 > 其他分享> > Codeforces Round #700 (Div. 2) C. Searching Local Minimum(二分)

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