제출 #641709

#제출 시각아이디문제언어결과실행 시간메모리
641709finn__원숭이와 사과 나무 (IZhO12_apple)C++17
100 / 100
644 ms207728 KiB
#include <bits/stdc++.h> using namespace std; struct stnode { unsigned t; bool z; stnode *l, *r; size_t x, y; stnode *new_node(bool left_child) { stnode *c = (stnode *)calloc(1, sizeof(stnode)); if (left_child) { c->x = x; c->y = (x + y) / 2; } else { c->x = (x + y) / 2 + 1; c->y = y; } return c; } void check_children() { if (!l) l = new_node(1); if (!r) r = new_node(0); } void propagate() { check_children(); if (z) { l->t = (l->y - l->x + 1); l->z = 1; r->t = (r->y - r->x + 1); r->z = 1; z = 0; } } void incr(size_t i, size_t j) { if (x > j || y < i) return; if (i <= x && y <= j) { t = (y - x + 1); z = 1; } else { propagate(); l->incr(i, j); r->incr(i, j); t = l->t + r->t; } } unsigned range_sum(size_t i, size_t j) { if (x > j || y < i) return 0; if (i <= x && y <= j) { return t; } else { propagate(); return l->range_sum(i, j) + r->range_sum(i, j); } } void destroy() { if (l) { l->destroy(); free(l); } if (r) { r->destroy(); free(r); } } }; int main() { size_t m; cin >> m; stnode *root = (stnode *)calloc(1, sizeof(stnode)); root->y = 1000000000; long c = 0; for (size_t i = 0; i < m; i++) { long d, x, y; cin >> d >> x >> y; if (d == 1) { unsigned v = root->range_sum(x - 1 + c, y - 1 + c); cout << v << '\n'; c = v; } else { root->incr(x - 1 + c, y - 1 + c); } } root->destroy(); }
#Verdict Execution timeMemoryGrader output
Fetching results...