제출 #781358

#제출 시각아이디문제언어결과실행 시간메모리
781358michy원숭이와 사과 나무 (IZhO12_apple)C++14
0 / 100
380 ms262144 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; struct Node { ll tl, tr, sum, lazy; Node *left = nullptr, *right = nullptr; Node(ll l, ll r) : tl(l), tr(r), sum(0), lazy(0) {} }; void push(Node *v) { if (v->tl == v->tr) return; ll tm = (v->tl + v->tr) / 2; if (!v->left) v->left = new Node(v->tl, tm); if (!v->right) v->right = new Node(tm+1, v->tr); if (v->lazy != 0) { v->left->sum = (tm - v->tl + 1); v->right->sum = (v->tr - tm); v->left->lazy = 1; v->right->lazy = 1; v->lazy = 0; } } ll query(Node *v, ll l, ll r) { push(v); if (l > v->tr || r < v->tl) return 0; if (l <= v->tl && v->tr <= r) return v->sum; return (v->left ? query(v->left, l, r) : 0) + (v->right ? query(v->right, l, r) : 0); } void update(Node *v, ll l, ll r) { push(v); if (l > v->tr || r < v->tl) return; if (l <= v->tl && v->tr <= r) { v->lazy = 1; v->sum = (v->tr - v->tl + 1); return; } if (v->left) update(v->left, l, r); if (v->right) update(v->right, l, r); v->sum = (v->left ? v->left->sum : 0) + (v->right ? v->right->sum : 0); } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int q; cin >> q; Node *root = new Node(1, 1e9); ll ans = 0; while (q--) { ll op, l, r; cin >> op >> l >> r; l += ans; r += ans; if (op == 1) { ans = query(root, l, r); cout << ans << "\n"; } else { update(root, l, r); } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...