Submission #890258

#TimeUsernameProblemLanguageResultExecution timeMemory
890258Justin1Monkey and Apple-trees (IZhO12_apple)C++17
0 / 100
404 ms262144 KiB
#include <bits/stdc++.h> #define f first #define s second #define int long long using namespace std; class dynamicSeg { //range max query, range set update int lzy, val; int l, r; dynamicSeg *L = NULL, *R = NULL; void extend(dynamicSeg *&node, int l, int r) { if (node == NULL) node = new dynamicSeg(l, r); } void push() { int mid = (l + r) / 2; extend(L, l, mid), extend(R, mid + 1, r); if (!lzy) return; L-> val = L->r - L->l + 1; R-> val = R->r - R->l + 1; L-> lzy = R->lzy = !(lzy = 0); } public: dynamicSeg (int sz) : l(1), r(sz) {} dynamicSeg (int l, int r) : l(l), r(r) {} void upd(int l, int r) { push(); if (this->r < l || r < this->l) return; if (l <= this->l && this->r <= r) { val = this->r - this->l + 1; lzy = 1; return; } L->upd(l, r), R->upd(l, r); val = L->val + R->val; } int qry(int l, int r) { push(); if (this->r < l || r < this->l) return 0; if (l <= this->l && this->r <= r) return val; return L->qry(l, r) + R->qry(l, r); } }; int n, m, k, x, y, z; dynamicSeg seg(1'000'000'000); void solve() { int C = 0; cin >> n; for (int i = 1; i <= n; i++) { cin >> x >> y >> z; if (x == 1) cout << (C = seg.qry(y + C, z + C)) << "\n"; else seg.upd(y + C, z + C); } } signed main() { cin.tie(0), cout.tie(0) -> sync_with_stdio(0); cout << fixed << setprecision(10); int T = 1; // cin >> T; while (T--) { solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...