Submission #915364

#TimeUsernameProblemLanguageResultExecution timeMemory
915364codefoxMonkey and Apple-trees (IZhO12_apple)C++14
0 / 100
2061 ms89036 KiB
#include<bits/stdc++.h> using namespace std; #define int long long int N = 1<<30; map<int, int> bit; void update(int curr, int l, int r, int cl, int cr) { if (cr < l || cl > r) return; if (l <= cl && cr <= r) { bit[curr] = cr-cl+1; return; } if(bit[curr] == cr-cl+1) { bit[curr*2] = (cr-cl+1)/2; bit[curr*2+1]=(cr-cl+1)/2; } int m = (cl+cr)/2; update(curr*2, l, r, cl, m); update(curr*2+1, l, r, m+1, cr); bit[curr] = bit[curr*2]+bit[curr*2+1]; return; } int query(int curr, int l, int r, int cl, int cr) { if (cr < l || cl > r) return 0; if (l <= cl && cr <= r) return bit[curr]; if(bit[curr] == cr-cl+1) { bit[curr*2] = (cr-cl+1)/2; bit[curr*2+1]=(cr-cl+1)/2; } int m = (cl+cr)/2; int sol = 0; sol += query(curr*2, l, r, cl, m); sol += query(curr*2+1, l, r, m+1, cr); return sol; } int32_t main() { //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); int q; cin >> q; int last = 0; for (int i = 0; i < q; i++) { int a, b, c; cin >> a >> b >> c; b--; c--; b+=last; c+=last; if (a==2) { update(1, b, c, 0, N-1); } else { last = query(1, b, c, 0, N-1); cout << last << "\n"; } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...