Submission #1152553

#TimeUsernameProblemLanguageResultExecution timeMemory
1152553zhehanZagrade (COI20_zagrade)C++20
0 / 100
1235 ms1100 KiB
#include <bits/stdc++.h>
using namespace std;

typedef pair<int,int> ii;

int main(){
    int n, q, check;
    string ans;
    vector<ii> paired;
    cin>>n>>q;
    int ptr=1;
    int counter=0;
    while(ptr<n+1){
        if(ptr==n){
            ptr++;
            continue;
        }
        cout<<"? "<<ptr<<' '<<ptr+1<<endl;
        cin>>check;
        if(check==0){
            ans+='(';
            ++ptr;
        }else{
            ans+="()";
            int pos=ptr+1;
            int c=0;
            int pc=1;
            int distback=0;
            while(check==1){
                while(!paired.empty()&&pc<=paired.size()&&ptr-c-1<=paired[paired.size()-pc].first&&ptr-c-1>=paired[paired.size()-pc].first-paired[paired.size()-pc].second){
                    ptr-=paired[paired.size()-pc].second;
                    distback+=paired[paired.size()-pc].second;
                    pc++;
                }
                if(ptr-c<=1||pos+c>=n){
                    break;
                }
                cout<<"? "<<ptr-c-1<<' '<<pos+c+1<<endl;
                cin>>check;
                if(check==0){
                    break;
                }
                c++;
            }
            for(int i=0;i<c;++i){
                ans+=')';
            }
            ptr+=distback;
            paired.push_back(ii(ptr+1+c,2+2*c));
            ptr+=c+2;
        }
    }
    while(ans.length()<n){
        ans+=')';
    }
    cout<<"! "<<ans;
    return 0;
}   
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...