Submission #381264

#TimeUsernameProblemLanguageResultExecution timeMemory
381264ScarletSMonkey and Apple-trees (IZhO12_apple)C++17
100 / 100
382 ms108692 KiB
#include <bits/stdc++.h> #define ll long long using namespace std; struct implicit { struct node { node *l,*r; int val = 0; bool allSet = 0; }; deque<node> buffer; int n; node *root; node *newnode() { buffer.emplace_back(); return &buffer.back(); } implicit(int n) : n(n) {root=newnode();} void passDown(node *&v) { if (!(v->l)) v->l=newnode(); if (!(v->r)) v->r=newnode(); if (v->allSet) { v->l->allSet=1; v->r->allSet=1; } } int calc(node *&v, int l, int r) { if (v->allSet) return r-l+1; return v->val; } void update(node *&v, int cL, int cR, int l, int r) { if (r<cL||cR<l) return; if (l<=cL&&cR<=r) { v->allSet=1; return; } passDown(v); update(v->l,cL,cL+(cR-cL)/2,l,r); update(v->r,cL+(cR-cL)/2+1,cR,l,r); v->val=calc(v->l,cL,cL+(cR-cL)/2)+calc(v->r,cL+(cR-cL)/2+1,cR); } void update(int l, int r) { update(root,1,n,l,r); } int query(node *&v, int cL, int cR, int l, int r) { if (r<cL||cR<l) return 0; if (l<=cL&&cR<=r) return calc(v,cL,cR); passDown(v); int rtn = query(v->l,cL,cL+(cR-cL)/2,l,r) + query(v->r,cL+(cR-cL)/2+1,cR,l,r); v->val=calc(v->l,cL,cL+(cR-cL)/2)+calc(v->r,cL+(cR-cL)/2+1,cR); return rtn; } int query(int l, int r) { return query(root,1,n,l,r); } }; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n,d,x,y,c=0; cin>>n; implicit seg(1e9); while (n--) { cin>>d>>x>>y; if (d==1) { c=seg.query(x+c,y+c); cout<<c<<"\n"; } else seg.update(x+c,y+c); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...