제출 #781386

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