Submission #351331

#TimeUsernameProblemLanguageResultExecution timeMemory
351331super_j6Tenis (COI19_tenis)C++14
100 / 100
175 ms14572 KiB
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; #define endl '\n' #define ll long long #define pi pair<int, int> #define f first #define s second const int mxn = 100000, k = 3; int n, q; int a[mxn][k], f[mxn]; int ff(int x){ return *max_element(a[x], a[x] + k); } struct segTree{ int l, r; segTree *tl, *tr; int vl, ss; segTree(int l, int r) : l(l), r(r){ if(l != r){ int mid = (l + r) / 2; tl = new segTree(l, mid); tr = new segTree(mid + 1, r); pul(); }else{ vl = ss = f[l] - 1; } } void pul(){ vl = max(tl->vl, tl->ss + tr->vl); ss = tl->ss + tr->ss; } void add(int x, int v){ if(x < l || r < x) return; if(l == r) return (void)(vl += v, ss += v); tl->add(x, v), tr->add(x, v); pul(); } int qry(int x = 0){ return l == r ? l : !(x + tl->vl) ? tl->qry(x) : tr->qry(x + tl->ss); } }; int main(){ ios::sync_with_stdio(0); cin.tie(0); cin >> n >> q; for(int j = 0; j < k; j++) for(int i = 0; i < n; i++){ int x; cin >> x; a[--x][j] = i; } for(int i = 0; i < n; i++) f[ff(i)]++; segTree tre(0, n - 1); while(q--){ int t; cin >> t; if(t & 1){ int x; cin >> x; x--; cout << (ff(x) <= tre.qry() ? "DA" : "NE") << endl; }else{ int x, y, z; cin >> z >> x >> y; x--, y--, z--; tre.add(ff(x), -1), tre.add(ff(y), -1); swap(a[x][z], a[y][z]); tre.add(ff(x), 1), tre.add(ff(y), 1); } } 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...
#Verdict Execution timeMemoryGrader output
Fetching results...