Submission #413747

#TimeUsernameProblemLanguageResultExecution timeMemory
413747LastRoninSeats (IOI18_seats)C++14
5 / 100
4046 ms39528 KiB
#include <bits/stdc++.h> #include "seats.h" #define ll long long #define pb push_back #define si short int #define f first #define s second #define mp make_pair using namespace std; const ll N = 1<<20; const ll big = 1e9; int n, dl; int h, w; int ans = 0; vector<int> R, C; struct segsnizu { si t[2 * N]; void upd(int p, si z) { int v = dl + p - 1; t[v] = z; v >>= 1; while(v) { t[v] = max(t[v * 2], t[v * 2 + 1]); v >>= 1; } } si get(int l, int r) { l = dl + l - 1, r = dl + r - 1; si ans = -30000; while(l <= r) { if(l&1) ans = max(t[l++], ans); if(!(r&1)) ans = max(t[r--], ans); l >>= 1, r >>= 1; } return ans; } } rt[4]; void give_initial_chart(int H, int W, vector<int> r, vector<int> c) { R = r, C = c; n = H*W; dl = (1<<(__lg(n - 1) + 1)); for(int i = 1; i <= n; i++) { rt[0].upd(i, r[i - 1]); rt[1].upd(i, -r[i - 1]); rt[2].upd(i, c[i - 1]); rt[3].upd(i, -c[i - 1]); } } int swap_seats(int a, int b) { swap(R[a], R[b]), swap(C[a], C[b]); rt[0].upd(a + 1, R[a]), rt[0].upd(b + 1, R[b]); rt[1].upd(a + 1, -R[a]), rt[1].upd(b + 1, -R[b]); rt[2].upd(a + 1, C[a]), rt[2].upd(b + 1, C[b]); rt[3].upd(a + 1, -C[a]), rt[3].upd(b + 1, -C[b]); int ans = 0; for(int i = 1; i <= n;) { int k = (rt[0].get(1, i) + rt[1].get(1, i) + 1) * (rt[2].get(1, i) + rt[3].get(1, i) + 1) - i; if(k == 0) ans++, k = 1; i += k; } return ans; } /* int main() { int n, m, q; cin >> n >> m >> q; vector<int> rr, cc; for(int i = 1, a, b; i <= n*m; i++) cin >> a >> b, rr.pb(a), cc.pb(b); give_initial_chart(n, m, rr, cc); while(q--) { ll a, b; cin >> a >> b; cout << swap_seats(a, b) << "\n"; } } */
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...