#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb(a) push_back(a)
#define pp pop_back
#define mp(a, b) make_pair(a, b)
int32_t main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n, q;
cin >> n >> q;
set <int> s;
set <int>::iterator x, y, it, it2;
bool valid;
char bracks[n+1];
memset(bracks, 0, sizeof(bracks));
for (int i=1; i<=n; i++) s.insert(i);
x=s.begin(); y=s.begin(); y++;
while (y!=s.end()) {
cout << "? " << *x << " " << *y << "\n" << flush;
cin >> valid;
if (valid) {
bracks[*x]='(';
bracks[*y]=')';
it=s.upper_bound(*y);
s.erase(x); s.erase(y);
if (s.empty()) break;
it2=s.begin();
if (it==it2) {
x=it; y=it; y++;
}
else {
y=it;
it--;
x=it;
}
}
else {x++; y++;}
}
int cnt=0, cur=0;
for (int i=1; i<=n; i++) if (bracks[i]==0) cnt++;
cnt/=2;
cout << "! ";
for (int i=1; i<=n; i++) {
if (bracks[i]==0) {
cur++;
if (cur>cnt) cout << "(";
else cout << ")";
}
else cout << bracks[i];
}
cout << "\n";
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |