Submission #669990

#TimeUsernameProblemLanguageResultExecution timeMemory
669990gortomiMonkey and Apple-trees (IZhO12_apple)C++17
100 / 100
39 ms3072 KiB
#include <bits/stdc++.h> using namespace std; struct node { int l, r, sum; bool lazy; node* lc; node* rc; node(int il, int ir) { l = il; r = ir; lazy = 0; sum = 0; lc = nullptr; rc = nullptr; } void next() { if(lc != nullptr) return; int m = (l + r) / 2; lc = new node(l, m); rc = new node(m + 1, r); } int val(int ql, int qr) { if(ql > qr) return 0; if(ql == l && qr == r) { return sum; } if(lazy) return qr - ql + 1; next(); int m = (l + r) / 2; return lc -> val(ql, min(m, qr)) + rc -> val(max(ql, m + 1), qr); } void upd(int ul, int ur) { if(ul > ur) return; if(ul == l && ur == r) { lazy = 1; sum = r - l + 1; return; } if(lazy) return; next(); int m = (l + r) / 2; lc -> upd(ul, min(m, ur)); rc -> upd(max(ul, m + 1), ur); sum = lc -> sum + rc -> sum; } }; node root = node(1, 1e9); int main() { ios::sync_with_stdio(0); cin.tie(0); int m, type, il, ir, c = 0; cin >> m; while(m--) { cin >> type >> il >> ir; if(type == 1) { c = root.val(il + c, ir + c); cout << c << "\n"; } if(type == 2) root.upd(il + c, ir + c); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...