为什么把scanf改成cincout就错了 //上面代码是ac的,下面改成cincout就wa1了
#include<bitsdc++.h>
using namespace std;
int T,n;
int Query(int l,int r)
{
printf("? %d %d\n",l,r),fflush(stdout);
int res;
scanf("%d",&res);
return res;
}
int Solve(int l,int r)
{
if(l==r) return l;
if(l+1==r) return Query(l,r)?l:r;
int posl=Solve(l,l+r>>1),posr=Solve((l+r>>1)+1,r);
return Query(l,posr-1)==Query(l,posr)?posr:posl;
}
signed main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
printf("! %d\n",Solve(1,n)),fflush(stdout);
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int T,n;
int Query(int l,int r)
{
cout<<"? "<<l<<' '<<r<<'\n';
fflush(stdout);
int res;
cin>>res;
return res;
}
int Solve(int l,int r)
{
if(l==r) return l;
if(l+1==r) return Query(l,r)?l:r;
int posl=Solve(l,l+r>>1),posr=Solve((l+r>>1)+1,r);
return Query(l,posr-1)==Query(l,posr)?posr:posl;
}
signed main()
{
cin>>T;
while(T--)
{
cin>>n;
cout<<"! "<<Solve(1,n)<<'\n',fflush(stdout);
}
return 0;
}