Submission #587276

#TimeUsernameProblemLanguageResultExecution timeMemory
587276rainboySuperpozicija (COCI22_superpozicija)C11
110 / 110
36 ms4732 KiB
#include <stdio.h> #include <string.h> #define N 100000 int hh[N * 2], rr[N * 2], iq[1 + N], pq[N * 2], cnt; int lt(int i, int j) { return rr[i] < rr[j]; } int p2(int p) { return (p *= 2) > cnt ? 0 : (p < cnt && lt(iq[p + 1], iq[p]) ? p + 1 : p); } void pq_up(int i) { int p, q, j; for (p = pq[i]; (q = p / 2) && lt(i, j = iq[q]); p = q) iq[pq[j] = p] = j; iq[pq[i] = p] = i; } void pq_dn(int i) { int p, q, j; for (p = pq[i]; (q = p2(p)) && lt(j = iq[q], i); p = q) iq[pq[j] = p] = j; iq[pq[i] = p] = i; } void pq_add(int i) { pq[i] = ++cnt, pq_up(i); } int pq_remove_first() { int i = iq[1], j = iq[cnt--]; if (j != i) pq[j] = 1, pq_dn(j); pq[i] = 0; return i; } int main() { int t; scanf("%d", &t); while (t--) { static char cc[N * 2 + 1], tt[N]; static int dd[N * 2]; int n, h, i, l, r, d; scanf("%d%s", &n, cc); memset(dd, 0, n * 2 * sizeof *dd); memset(hh, -1, n * 2 * sizeof *hh), memset(rr, -1, n * 2 * sizeof *rr); for (h = 0; h < n; h++) { int l, r; scanf("%d%d", &l, &r), l--, r--; if (cc[l] == '(' && cc[r] == '(') tt[h] = 0, dd[l]++; else if (cc[l] == ')' && cc[r] == ')') tt[h] = 1, dd[r]--; else { hh[l] = h, rr[l] = r; if (cc[l] == '(') tt[h] = 1, dd[r]--; else tt[h] = 0, dd[l]--; } } memset(pq, 0, n * 2 * sizeof *pq), cnt = 0; for (i = 0, d = 0; i < n * 2; i++) { if (rr[i] != -1) pq_add(i); d += dd[i]; if (d < 0) { if (cnt == 0) { d = -1; break; } l = pq_remove_first(), h = hh[l], r = rr[l]; tt[h] ^= 1; if (r <= i) d += 2; else d++, dd[r]++; } } if (d != 0) printf("-1\n"); else { for (h = 0; h < n; h++) printf("%d ", tt[h]); printf("\n"); } } return 0; }

Compilation message (stderr)

Main.c: In function 'main':
Main.c:46:2: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   46 |  scanf("%d", &t);
      |  ^~~~~~~~~~~~~~~
Main.c:52:3: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   52 |   scanf("%d%s", &n, cc);
      |   ^~~~~~~~~~~~~~~~~~~~~
Main.c:58:4: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   58 |    scanf("%d%d", &l, &r), l--, r--;
      |    ^~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...