CF1698D Fixed Point Guessing
思路: 二分
- 怎么看出来二分的呢?
要学会关注数据范围。只能问
- 如何二分?
注意到 3 2 1 5…… 你看,前四个数中有
那么实现就很简单了,代码如下:
#include<bits/stdc++.h>
using namespace std;
int t,n,a,x;
int main() {
cin>>t;
while(t--) {
cin>>n;
int l=1,r=n;
while(l<r) {
int mid=(l+r)>>1;
cout<<"? "<<l<<" "<<mid<<endl;
fflush(stdout);
int cnt=0;
for(int i=l;i<=mid;i++) {
cin>>x;
if(x>=l&&x<=mid)cnt++;
}
if(cnt%2==1)r=mid;
else l=mid+1;
}
cout<<"! "<<l<<endl;
fflush(stdout);
}
}