Submission #1205047

#TimeUsernameProblemLanguageResultExecution timeMemory
1205047PlayVoltzMonkey and Apple-trees (IZhO12_apple)C++20
100 / 100
26 ms880 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 { node *lc, *rc; int ans; node(): lc(NULL), rc(NULL), ans(0) {} }; node *st; #define mid ((l+r)>>1) void upd(int s, int e, int l=1, int r=1e9+1, node *v=st) { if(s>=r || l>=e || v->ans==r-l) return; if(s<=l && r<=e) { v->ans = r-l; return; } if(!v->lc) v->lc = new node(); if(!v->rc) v->rc = new node(); upd(s, e, l, mid, v->lc); upd(s, e, mid, r, v->rc); v->ans = v->lc->ans + v->rc->ans; } int get(int s, int e, int l=1, int r=1e9+1, node *v=st) { if(s>=r || l>=e || !v->ans) return 0; if(s<=l && r<=e) return v->ans; if(v->ans==r-l) return min(e,r)-max(l,s); return get(s, e, l, mid, v->lc) + get(s, e, mid, r, v->rc); } 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(); while (q--){ cin>>a>>b>>c, b+=ans, c+=ans+1; if (a==1)ans=get(b, c), cout<<ans<<"\n"; else upd(b, c); } }
#Verdict Execution timeMemoryGrader output
Fetching results...