Submission #1205038

#TimeUsernameProblemLanguageResultExecution timeMemory
1205038PlayVoltzMonkey and Apple-trees (IZhO12_apple)C++20
0 / 100
343 ms301880 KiB
#include <cstdio> #include <stdio.h> #include <stdbool.h> #include <iostream> #include <map> #include <vector> #include <climits> #include <stack> #include <string> #include <queue> #include <algorithm> #include <set> #include <unordered_set> #include <unordered_map> #include <cmath> #include <cctype> #include <bitset> #include <iomanip> #include <cstring> #include <numeric> #include <cassert> using namespace std; #define int long long #define pii pair<int, int> #define mp make_pair #define pb push_back #define fi first #define se second struct node{ int s, e, m, val, lazyset, lazyadd; node *l, *r; void create(){ if (l==nullptr){ l = new node(s, m); r = new node(m+1, e); } } void propagate(){ if (lazyset!=-1)val=lazyset*(e-s+1); val+=lazyadd*(e-s+1); if (s!=e){ create(); if (lazyset!=-1){ l->lazyset=lazyset; r->lazyset=lazyset; l->lazyadd=r->lazyadd=0; } if (lazyadd){ l->lazyadd+=lazyadd; r->lazyadd+=lazyadd; } } lazyset=-1; lazyadd=0; } node(int S, int E){ s = S, e = E, m = (s+e)/2; val=lazyadd=0; lazyset=-1; l=r=nullptr; } void upset(int left, int right, int v){ propagate(); if (s==left && e==right)lazyadd=0, lazyset=v; else{ create(); if (right<=m)l->upset(left, right, v); else if (left>m)r->upset(left, right, v); else l->upset(left, m, v), r->upset(m+1, right, v); r->propagate(), l->propagate(); val=l->val+r->val; } } void upadd(int left, int right, int v){ propagate(); if (s==left && e==right)lazyadd+=v; else{ create(); if (right<=m)l->upadd(left, right, v); else if (left>m)r->upadd(left, right, v); else l->upadd(left, m, v), r->upadd(m+1, right, v); r->propagate(), l->propagate(); val=l->val+r->val; } } int query(int left, int right){ propagate(); if (s==left && e==right)return val; create(); if (right<=m)return l->query(left, right); else if (left>m)return r->query(left, right); else return l->query(left, m)+r->query(m+1, right); } }*st; int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int q, ans=0, a, b, c; cin>>q; st = new node(1, 1000000005); while (q--){ cin>>a>>b>>c, b+=ans, c+=ans; if (a==1)ans=st->query(b, c), cout<<ans<<"\n"; else st->upset(b, c, 1); } }
#Verdict Execution timeMemoryGrader output
Fetching results...