Submission #952671

#TimeUsernameProblemLanguageResultExecution timeMemory
952671NK_Superpozicija (COCI22_superpozicija)C++17
110 / 110
62 ms6620 KiB
// Success consists of going from failure to failure without loss of enthusiasm #include <bits/stdc++.h> using namespace std; #define nl '\n' #define pb push_back #define sz(x) int(x.size()) template<class T> using V = vector<T>; using vi = V<int>; void solve() { int N; cin >> N; string S; cin >> S; vi L(N), R(N), ans(N); V<array<int, 2>> A; set<array<int, 2>> F; vi rem; set<int> pos; for(int i = 0; i < N; i++) { cin >> L[i] >> R[i]; --L[i], --R[i]; if (S[L[i]] == '(' && S[R[i]] == '(') { rem.pb(L[i]); ans[i] = 0; } if (S[L[i]] == ')' && S[R[i]] == ')') { pos.insert(R[i]); ans[i] = 1; } if (S[L[i]] == '(' && S[R[i]] == ')') { pos.insert(R[i]); A.pb({L[i], i}); ans[i] = 1; } if (S[L[i]] == ')' && S[R[i]] == '(') { pos.insert(L[i]); A.pb({L[i], i}); ans[i] = 0; } } auto pair = [&](int x) { auto it = pos.lower_bound(x); if (it == end(pos)) return 0; pos.erase(it); return 1; }; for(auto& x : rem) { if (!pair(x)) { cout << -1 << nl; return; } } sort(begin(A), end(A)); int p = -1; while(sz(pos)) { int lim = *begin(pos); while(p + 1 < sz(A) && A[p + 1][0] <= lim) { ++p; int x = A[p][1]; F.insert({R[x], x}); } bool ok = 1; if (!sz(F)) ok = 0; else { int x = (*begin(F))[1]; F.erase(begin(F)); ans[x] ^= 1; if (!pair(L[x])) ok = 0; if (!pair(R[x])) ok = 0; } if (!ok) { cout << -1 << nl; return; } } // cout << 1 << nl; for(auto& x : ans) cout << x << " "; cout << nl; } int main() { cin.tie(0)->sync_with_stdio(0); int T; cin >> T; while(T--) { solve(); } exit(0-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...