Submission #957921

#TimeUsernameProblemLanguageResultExecution timeMemory
957921bmh123456789asdfMonkey and Apple-trees (IZhO12_apple)C++14
0 / 100
123 ms262144 KiB
#include<bits/stdc++.h> #define int long long using namespace std; const int N = 100000; struct Node { int sum, lazy, tl, tr, l, r; Node() : sum(0), lazy(0), l(-1), r(-1) {} }; Node tree[64 * N]; int cnt = 2; void pushlazy(int id) { if(tree[id].lazy) { tree[id].sum = tree[id].tr - tree[id].tl + 1; int mid = (tree[id].tr + tree[id].tl) / 2; if(tree[id].l == -1) { tree[id].l = ++cnt; tree[cnt].tl = tree[id].tl; tree[cnt].tr = mid; } if(tree[id].r == -1) { tree[id].r = ++cnt; tree[cnt].tl = mid + 1; tree[cnt].tr = tree[id].tr; } tree[tree[id].l].lazy = tree[tree[id].r].lazy = 1; tree[id].lazy = 0; } } void update(int id,int low,int high) { pushlazy(id); if(low == tree[id].tl && high == tree[id].tr) { tree[id].lazy = 1; pushlazy(id); } else { int mid = (tree[id].tr + tree[id].tl) / 2; if(tree[id].l == -1) { tree[id].l = ++cnt; tree[cnt].tl = tree[id].tl; tree[cnt].tr = mid; } if(tree[id].r == -1) { tree[id].r = ++cnt; tree[cnt].tl = mid + 1; tree[cnt].tr = tree[id].tr; } if(low > mid) update(tree[id].r, low, high); else if(high <= mid) update(tree[id].l, low, high); else { update(tree[id].l, low, mid); update(tree[id].r, mid + 1, high); } pushlazy(tree[id].l); pushlazy(tree[id].r); tree[id].sum = tree[tree[id].l].sum + tree[tree[id].r].sum; } } int query(int id,int low,int high) { pushlazy(id); if(low == tree[id].tl && high == tree[id].tr) return tree[id].sum; else { int mid = (tree[id].tr + tree[id].tl) / 2; if(tree[id].l == -1) { tree[id].l = ++cnt; tree[cnt].tl = tree[id].tl; tree[cnt].tr = mid; } if(tree[id].r == -1) { tree[id].r = ++cnt; tree[cnt].tl = mid + 1; tree[cnt].tr = tree[id].tr; } if(low > mid) return query(tree[id].r, low, high); else if(high <= mid) return query(tree[id].l, low, high); else return query(tree[id].l, low, mid) + query(tree[id].r, mid + 1, high); } } int32_t main() { // freopen("test.inp", "r" ,stdin); ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int m, d, x, y, c = 0; tree[1].sum = 0; tree[1].lazy = 0; tree[1].tl = 1; tree[1].tr = 1e9; cin >> m; for(int i = 1; i <= m; i++) { cin >> d >> x >> y; if(d == 1) { c = query(1, x + c, y + c); cout << c <<'\n'; } else update(1, x + c, y + c); } }
#Verdict Execution timeMemoryGrader output
Fetching results...