Submission #1219140

#TimeUsernameProblemLanguageResultExecution timeMemory
1219140iamhereforfunMonkey and Apple-trees (IZhO12_apple)C++20
100 / 100
388 ms260740 KiB
// IamHereForFun // #include <bits/stdc++.h> using namespace std; #define LSOne(X) ((X) & -(X)) const int N = 16; const int M = 1355; const int C = 26; const int LG = 61; const int R = 25e3 + 5; const int B = 450; const int O = 3e5 + 5; const int INF = 1e9 + 5; const int MOD = 998244353; const int nx[] = {0, 1, 0, -1}, ny[] = {1, 0, -1, 0}; struct SparseSegmentTree { struct Node { Node *le, *ri; int lazy, val; Node() { le = ri = NULL; lazy = val = 0; } }; Node *root; int n; SparseSegmentTree(int len) { root = new Node(); n = len; } void apply(Node *a, Node *b, int len) { if (b->lazy == 1) { a->lazy = 1; } } void prop(Node *cur, int l, int r) { if (cur->lazy == 1) cur->val = r - l + 1; if (l != r) { if (cur->le == NULL) cur->le = new Node(); if (cur->ri == NULL) cur->ri = new Node(); int m = (l + r) / 2; apply(cur->le, cur, m - l + 1); apply(cur->ri, cur, r - (m + 1) + 1); } } void update(Node *cur, int l, int r, int tl, int tr) { prop(cur, l, r); if (tl > tr) return; if (tl <= l && r <= tr) { // cout << l << " " << r << "u\n"; cur->lazy = 1; prop(cur, l, r); } else { int m = (l + r) / 2; update(cur->le, l, m, tl, min(tr, m)); update(cur->ri, m + 1, r, max(tl, m + 1), tr); cur->val = cur->le->val + cur->ri->val; } } int get(Node *cur, int l, int r, int tl, int tr) { prop(cur, l, r); if (tl > tr) return 0; if (tl <= l && r <= tr) { // cout << l << " " << r << " " << cur->val << " " << tl << " " << tr << "\n"; return cur->val; } else { int m = (l + r) / 2; return get(cur->le, l, m, tl, min(tr, m)) + get(cur->ri, m + 1, r, max(tl, m + 1), tr); } } void update(int l, int r) { update(root, 0, n - 1, l, r); } int get(int l, int r) { return get(root, 0, n - 1, l, r); } }; int q, last = 0; void solve() { cin >> q; SparseSegmentTree st(1e9 + 1e8); for (int x = 0; x < q; x++) { int t, l, r; cin >> t >> l >> r; if (t == 1) { int i = st.get(l + last, r + last); cout << i << "\n"; last = i; } else { st.update(l + last, r + last); } } } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t = 1; // cin >> t; for (int x = 1; x <= t; x++) { solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...