Submission #1187815

#TimeUsernameProblemLanguageResultExecution timeMemory
1187815pacmanMonkey and Apple-trees (IZhO12_apple)C++20
0 / 100
0 ms320 KiB
#include <bits/stdc++.h> #define int int64_t using namespace std; const int maxn = 1e9; int Q, C; struct segment_tree{ struct node{ int sum = 0 ,lazy = 0, left = -1 , right = -1; }; vector<node> seg; segment_tree(){ seg.reserve(2 * 100000 * 30); seg.push_back(node()); seg.push_back(node()); } int sz = 1; void push(int v ,int L, int R){ if(seg[v].left == -1){ seg[v].left = ++sz; seg.push_back(node()); } if(seg[v].right == -1){ seg[v].right = ++sz; seg.push_back(node()); } int mid = (R + L) / 2; if(seg[v].lazy == 1){ seg[seg[v].left].lazy = 1; seg[seg[v].left].sum = (mid - L + 1); seg[seg[v].right].lazy = 1; seg[seg[v].right].sum = (R - mid); seg[v].lazy = 0; } } void update(int v ,int L, int R ,int l, int r){ if(l > R or L > r or l > r or L > R){ return; } if(l <= L and R <= r){ seg[v].lazy = 1; seg[v].sum = (R - L + 1); return; } push(v ,L, R); int mid = (R + L) / 2; update(seg[v].left, L, mid ,l ,r); update(seg[v].right, mid + 1, R ,l, r); seg[v].sum = (seg[seg[v].left].sum + seg[seg[v].right].sum); } int get(int v, int L, int R, int l, int r){ if(L > r or l > R or l > r or L > R){ return 0; } if(l <= L and R <= r){ return seg[v].sum; } int mid = (R + L) / 2; return (get(seg[v].left, L, mid , l, r) + get(seg[v].right, mid + 1, R , l, r)); } }seg; void in(){ cin >> Q; } void out(){ while(Q--){ int type, l ,r; cin >> type >> l >> r; l--, r--; if(type == 1){ C = seg.get(1 ,0 , maxn - 1, l + C, r + C); cout << C << "\n"; } else{ seg.update(1 ,0, maxn - 1, l + C , r + C); } } } int32_t main(){ ios::sync_with_stdio(0) ,cout.tie(0) ,cin.tie(0); in(); out(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...