QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#538396 | #8939. Permutation | ucup-team3555# | WA | 1ms | 3620kb | C++20 | 887b | 2024-08-31 11:19:25 | 2024-08-31 11:19:27 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+3;
ll n;
int Ask(int l,int r)
{
cout<<"? "<<l<<" "<<r<<endl;
int x;cin>>x;
return x;
//return query(l,r);
}
int Sol(int l,int r)
{
if(l==r)return l;
int p=Ask(l,r),op=0;
if(l+1==r)return p==l?l+1:l;
if(p-l<=r-p)op=(p==l||Ask(l,p)!=p)?1:0;
else op=(p==r||Ask(p,r)!=p)?0:1;
if(!op)
{
int kl=l,kr=p,nb=l;
while(kl<kr)
{
int mi=kl+(kr-kl+1)*(1-0.618);
if(Ask(mi,p)==p)nb=mi,kl=mi+1;
else return Sol(nb,mi-1);
}
return p-1;
}
else
{
int kl=p,kr=r,nb=r;
while(kl<kr)
{
int mi=kl+(kr-kl+1)*(1-0.618);
if(Ask(p,mi)==p)nb=mi,kr=mi-1;
else return Sol(mi+1,nb);
}
return p+1;
}
}
void Solve()
{
cin>>n;
int x=Sol(1,n);
cout<<"! "<<x<<endl;
}
int main()
{
int T;cin>>T;
while(T--)Solve();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 1ms
memory: 3620kb
input:
3 5 3 2 3 6 6 3 1 4 3 3
output:
? 1 5 ? 1 3 ? 3 4 ! 4 ? 1 6 ? 3 6 ? 1 2 ! 2 ? 1 4 ? 3 4 ? 3 3
result:
wrong answer Integer 3 violates the range [4, 4] (test case 3)