Submission #631975

#TimeUsernameProblemLanguageResultExecution timeMemory
631975minhcool즐거운 사진 수집 (JOI13_collecting)C++17
100 / 100
3957 ms78324 KiB
#include<bits/stdc++.h> using namespace std; #define y1 y11 #define int long long #define fi first #define se second #define pb push_back //#define mp make_pair #define foru(i, l, r) for(int i = l; i <= r; i++) #define ford(i, r, l) for(int i = r; i >= l; i--) typedef pair<int, int> ii; typedef pair<ii, int> iii; typedef pair<ii, ii> iiii; const int N = (1LL << 20); const int oo = 1e18 + 7, mod = 1e9 + 7; int n, q; int IT1[N << 1], IT2[N << 1]; int tol1[N], tol2[N]; void upd1(int id, int l, int r, int pos, int lay){ if(l == r){ IT1[id] ^= 1; return; } bool ck = (IT1[id] == 0 || IT1[id] == (1LL << lay)); tol1[lay] -= ck; int mid = (l + r) >> 1; if(pos <= mid) upd1(id << 1, l, mid, pos, lay - 1); else upd1(id << 1 | 1, mid + 1, r, pos, lay - 1); IT1[id] = IT1[id << 1] + IT1[id << 1 | 1]; ck = (IT1[id] == 0 || IT1[id] == (1LL << lay)); tol1[lay] += ck; } void upd2(int id, int l, int r, int pos, int lay){ if(l == r){ IT2[id] ^= 1; return; } bool ck = (IT2[id] == 0 || IT2[id] == (1LL << lay)); tol2[lay] -= ck; int mid = (l + r) >> 1; if(pos <= mid) upd2(id << 1, l, mid, pos, lay - 1); else upd2(id << 1 | 1, mid + 1, r, pos, lay - 1); IT2[id] = IT2[id << 1] + IT2[id << 1 | 1]; ck = (IT2[id] == 0 || IT2[id] == (1LL << lay)); tol2[lay] += ck; } void process(){ cin >> n >> q; for(int i = 0; i <= n; i++){ tol1[i] = tol2[i] = (1LL << (n - i)); } while(q--){ int type, x; cin >> type >> x; if(type == 0) upd1(1, 1, (1LL << n), x, n); else upd2(1, 1, (1LL << n), x, n); int total = 0, answer = 0; for(int i = n; i >= 0; i--){ //cout << tol1[i] << " " << tol2[i] << "\n"; total *= 4; answer += (1LL << (n - i)) * (1LL << (n - i)) - (tol1[i + 1] * tol2[i + 1] * 4); //cout << answer << "\n"; total += (tol1[i] * tol2[i] - total); } cout << answer << "\n"; } } signed main(){ ios_base::sync_with_stdio(0); int t = 1; //cin >> t; while(t--) process(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...