Submission #586672

#TimeUsernameProblemLanguageResultExecution timeMemory
586672MilosMilutinovicTenis (COI19_tenis)C++14
51 / 100
524 ms15152 KiB
/** * author: wxhtzdy * created: 30.06.2022 15:33:08 **/ #include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); int n, q; cin >> n >> q; vector<vector<int>> a(n, vector<int>(3)); for (int j = 0; j < 3; j++) { for (int i = 0; i < n; i++) { int x; cin >> x; --x; a[x][j] = i; } } vector<int> lzy(8 * n); vector<int> mn(8 * n); function<void(int)> push = [&](int node) { mn[node + node] += lzy[node]; mn[node + node + 1] += lzy[node]; lzy[node + node] += lzy[node]; lzy[node + node + 1] += lzy[node]; lzy[node] = 0; }; function<void(int, int, int, int, int, int)> modify = [&](int node, int l, int r, int ll, int rr, int v) { push(node); if (l > r || l > rr || r < ll) { return; } if (ll <= l && r <= rr) { mn[node] += v; lzy[node] += v; push(node); return; } push(node); int mid = l + r >> 1; modify(node + node, l, mid, ll, rr, v); modify(node + node + 1, mid + 1, r, ll, rr, v); mn[node] = min(mn[node + node], mn[node + node + 1]); }; function<int(int, int, int)> walk = [&](int node, int l, int r) { if (l == r) { return l; } push(node); int mid = l + r >> 1; if (mn[node + node] == 0) { return walk(node + node, l, mid); } else { return walk(node + node + 1, mid + 1, r); } }; for (int i = 0; i < n; i++) { modify(1, 0, n - 1, i, i, i + 1); } function<void(int)> Add = [&](int i) { int mx = 0; for (int j = 0; j < 3; j++) { mx = max(mx, a[i][j]); } modify(1, 0, n - 1, mx, n - 1, -1); }; function<void(int)> Rem = [&](int i) { int mx = 0; for (int j = 0; j < 3; j++) { mx = max(mx, a[i][j]); } modify(1, 0, n - 1, mx, n - 1, +1); }; for (int i = 0; i < n; i++) { Add(i); } while (q--) { int op; cin >> op; if (op == 1) { int i; cin >> i; --i; cout << (walk(1, 0, n - 1) >= max({a[i][0], a[i][1], a[i][2]}) ? "DA" : "NE") << '\n'; } else { int p, i, j; cin >> p >> i >> j; --p; --i; --j; Rem(i); Rem(j); swap(a[i][p], a[j][p]); Add(i); Add(j); } } return 0; }

Compilation message (stderr)

tenis.cpp: In lambda function:
tenis.cpp:44:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   44 |     int mid = l + r >> 1;
      |               ~~^~~
tenis.cpp: In lambda function:
tenis.cpp:54:17: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   54 |     int mid = l + r >> 1;
      |               ~~^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...