Submission #1278025

#TimeUsernameProblemLanguageResultExecution timeMemory
1278025yazanshMonkey and Apple-trees (IZhO12_apple)C++20
100 / 100
310 ms205552 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define pb push_back #define all(a) a.begin(),a.end() const int LOG=31; const int mxn=2e9+5; const ll inf =1e18; const int mod=998244353; struct dsegtree{ int mx; struct node { ll s=0, lz = 0; node *l=nullptr, *r = nullptr; }; node *root; dsegtree(int n) { mx = n; root = new node; } void apply(node *cur,ll sz,ll v ){ if(v==1){ cur->lz = 1; cur->s = sz * v; } } void push(node *cur,int lx,int rx){ if(cur->l==nullptr) cur->l = new node; if(cur->r==nullptr) cur->r = new node; int mid = lx + (rx - lx) / 2; apply(cur->l, mid-lx+1, cur->lz); apply(cur->r, rx-mid, cur->lz); } void update(node *cur,int lx,int rx,int l,int r,int v){ if(lx>r||rx<l) return; if(l<=lx&&rx<=r){ apply(cur, rx - lx + 1, v); return; } int mid = lx + (rx - lx) / 2; push(cur, lx, rx); update(cur->l, lx, mid, l, r, v); update(cur->r, mid + 1, rx, l, r, v); cur->s = cur->l->s + cur->r->s; } int query(node * cur,int lx,int rx,int l,int r){ if(lx>r||rx<l) return 0; if(l<=lx&&rx<=r){ return cur->s; } int mid = lx + (rx - lx) / 2; push(cur, lx, rx); return query(cur->l, lx, mid, l, r)+query(cur->r, mid + 1, rx, l, r); } void update(int l,int r,int val){ update(root, 0, mx - 1, l, r, val); } int query(int l,int r){ return query(root, 0, mx - 1, l, r); } }; void solve(){ int q; cin >> q; dsegtree st(mxn); int c = 0; while (q--) { int op, l, r; cin >> op >> l >> r; if(op==1){ c = st.query(l + c, r + c); cout << c << "\n"; } else { st.update(l + c, r + c, 1); } } } signed main(){ ios_base::sync_with_stdio(NULL); cin.tie(nullptr); cout.tie(nullptr); #ifdef Usaco string f="shortcut"; freopen((f+".in").c_str(),"r",stdin); freopen((f+".out").c_str(),"w",stdout); #endif ll tt = 1; // cin >> tt; while (tt--){ solve(); //cout<<"\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...