Submission #1283655

#TimeUsernameProblemLanguageResultExecution timeMemory
1283655VMaksimoski008Monkey and Apple-trees (IZhO12_apple)C++20
100 / 100
415 ms230560 KiB
#include <bits/stdc++.h> using namespace std; struct node { node *lc, *rc; int sum = 0, lazy = 0; node(int _s = 0) : sum(_s), lc(nullptr), rc(nullptr) {} node(node *lc, node *rc) : lc(lc), rc(rc) { if(lc) sum += lc->sum; if(rc) sum += rc->sum; } void ext() { if(!lc) { lc = new node(); lc->lazy = lazy; } if(!rc) { rc = new node(); rc->lazy = lazy; } } void push(int tl, int tr) { if(!lazy) return ; sum = tr - tl + 1; if(tl != tr) { ext(); lc->lazy = 1; rc->lazy = 1; } lazy = 0; } void update(int tl, int tr, int l, int r) { push(tl, tr); if(tl > r || l > tr) return ; if(l <= tl && tr <= r) { lazy = 1; push(tl, tr); return ; } ext(); int tm = (tl + tr) / 2; lc->update(tl, tm, l, r); rc->update(tm+1, tr, l, r); sum = lc->sum + rc->sum; } int query(int tl, int tr, int l, int r) { if(tl > r || l > tr) return 0; push(tl, tr); if(l <= tl && tr <= r) return sum; ext(); int tm = (tl + tr) / 2; return lc->query(tl, tm, l, r) + rc->query(tm+1, tr, l, r); } }; signed main() { ios_base::sync_with_stdio(false); cout.tie(0); cin.tie(0); node *sgt = new node(); int n = 1e9, q; cin >> q; int lst = 0; while(q--) { int t, l, r; cin >> t >> l >> r; if(t == 1) { cout << (lst = sgt->query(1, n, l+lst, r+lst)) << '\n'; } else { sgt->update(1, n, l+lst, r+lst); } } }
#Verdict Execution timeMemoryGrader output
Fetching results...