Submission #1295539

#TimeUsernameProblemLanguageResultExecution timeMemory
1295539danirasillaZagrade (COI20_zagrade)C++20
100 / 100
256 ms5220 KiB
#include <iostream>
#include <string>
#include <algorithm>
#include <iomanip>
#include <vector>
#include <map>
#include <iterator>
#include <set>
#include <random>
#include <unordered_map>
#include <queue>
#include <cassert>
#include <stack>
#include <numeric>
#include <deque>


using namespace std;
typedef long long ll;
typedef long double ld;
const ll md1 = 1'000'000'000;
const ll md2 = 998244353;
const ll mdd = 666013;

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	int t = 1;
	//cin >> t;
	while (t--) {

		int n, q;
		cin >> n >> q;
		string s(n, '.');
		int p = -1;
		set<int> st;
		for (int i = 0; i < n; i++) {
			if (p == -1) {
				p = i;
				i++;
			}
			cout << "? " << p + 1 << " " << i + 1 << endl;
			int v;
			cin >> v;
			if (v == 1) {
				s[p] = '(';
				s[i] = ')';
				if (st.empty())
					p = -1;
				else {
					p = (*st.rbegin());
					st.erase(prev(st.end()));
				}
			}
			else {
				st.insert(p);
				p = i;
			}
		}
		int k = 0;
		for (int i = 0; i < n; i++)
			if (s[i] == '.')
				k++;
		k /= 2;
		for (int i = 0; i < n; i++)
			if (s[i] == '.') {
				if (k) {
					k--;
					s[i] = ')';
				}
				else
					s[i] = '(';
			}
		cout << "! " << s << endl;
	}
	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...