Submission #850231

#TimeUsernameProblemLanguageResultExecution timeMemory
8502311075508020060209tcMađioničar (COI22_madionicar)C++14
13 / 100
1236 ms28244 KiB
#include<bits/stdc++.h> using namespace std; //#define int long long map<pair<int,int>,int>mp; map<pair<int,int>,int>vis; int ask(int l,int r){ if(l==r){return 1;} if(vis[{l,r}]){return mp[{l,r}];} cout<<"? "<<l<<" "<<r<<endl; int ret; vis[{l,r}]=1; cin>>ret; mp[{l,r}]=ret; return ret; } int n; int rpl[300005]; int rask(int l,int r){ if(l==r){return 1;} if(l%2==1){l++;} if(r%2==1){r--;} if(l==r){return 1;} l=(l+1)/2;r=(r+1)/2; return ask(l,r); } int par[300005]; //*#a#a#a#b# signed main(){ cin>>n; int l=1;int r=1; par[1]=1; for(int i=2;i<=n+n+1;i++){ if(r<i){ par[i]=0;int lit=i;int rit=i; while(lit>=1&&rit<=n+n+1&&rask(lit,rit)==1){lit--;rit++;par[i]++;} }else{ par[i]=min(r-i+1,par[l+(r-i+1)-1])-1; int lit=i-par[i];int rit=i+par[i]; while(lit>=1&&rit<=n+n+1&&rask(lit,rit)==1){lit--;rit++;par[i]++;} } if(i+par[i]-1>r){ r=i+par[i]-1; l=i-par[i]+1; } } int ans=0; for(int i=1;i<=n+n+1;i++){ ans=max(ans,par[i]); } cout<<"! "<<ans-1<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...