Submission #314466

#TimeUsernameProblemLanguageResultExecution timeMemory
314466Vince729Monkey and Apple-trees (IZhO12_apple)C++11
100 / 100
51 ms3096 KiB
#include<iostream> #include<cstdio> #include<string> #include<vector> #include<cstring> #include<algorithm> #include<set> using namespace std; typedef long long ll; const int MAXN = 100003; const int MOD = 1000000007; struct Node { int l, r, sum; bool z; Node *ln, *rn; Node(int _l, int _r): l(_l), r(_r), sum(0), z(0), ln(nullptr), rn(nullptr) {} void upd(int a, int b) { if (z) return; if (a <= l && b >= r) { sum = r-l+1; z = true; } else { int mid = (l+r)/2; if (a <= mid) { if (!ln) ln = new Node(l, mid); ln->upd(a, b); } if (b > mid) { if (!rn) rn = new Node(mid+1, r); rn->upd(a, b); } sum = 0; if (ln) sum += ln->sum; if (rn) sum += rn->sum; } } int qry(int a, int b) { if (b < l || a > r) return 0; if (a <= l && b >= r) return sum; if (z) return min(b, r)-max(a, l)+1; int ret = 0; if (ln) ret += ln->qry(a, b); if (rn) ret += rn->qry(a, b); return ret; } }; int m; Node root(1, 1000000000); int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> m; int c = 0; while (m--) { int d, x, y; cin >> d >> x >> y; if (d == 2) { root.upd(x+c, y+c); } else { c = root.qry(x+c, y+c); cout << c << '\n'; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...