Submission #1243336

#TimeUsernameProblemLanguageResultExecution timeMemory
1243336lorebas12Monkey and Apple-trees (IZhO12_apple)C++20
0 / 100
0 ms320 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int MAX_NODES = 4e7; // Máximo de nós const int MAX_RANGE = 1e9; // Maior coordenada possível struct Node { int sum = 0; // Quantas árvores estão maduras neste nó int left = -1, right = -1; // Índices dos filhos }; vector<Node> seg(1); // Começa com nó raiz em índice 0 int C = 0; // Valor acumulado usado nos deslocamentos // Atualiza intervalo [l, r] com valor 1 (madura) void update(int u, int tl, int tr, int l, int r) { if (r < tl || tr < l) return; if (l <= tl && tr <= r) { seg[u].sum = tr - tl + 1; return; } int tm = (tl + tr) / 2; if (seg[u].left == -1) { seg[u].left = seg.size(); seg.emplace_back(); } if (seg[u].right == -1) { seg[u].right = seg.size(); seg.emplace_back(); } update(seg[u].left, tl, tm, l, r); update(seg[u].right, tm + 1, tr, l, r); seg[u].sum = (seg[u].left == -1 ? 0 : seg[seg[u].left].sum) + (seg[u].right == -1 ? 0 : seg[seg[u].right].sum); } // Consulta quantas árvores maduras estão em [l, r] int query(int u, int tl, int tr, int l, int r) { if (u == -1 || r < tl || tr < l) return 0; if (l <= tl && tr <= r) return seg[u].sum; int tm = (tl + tr) / 2; int sl = query(seg[u].left, tl, tm, l, r); int sr = query(seg[u].right, tm + 1, tr, l, r); return sl + sr; } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); int M; cin >> M; while (M--) { int D, X, Y; cin >> D >> X >> Y; X += C; Y += C; if (D == 1) { // Chris chega int res = query(0, 1, MAX_RANGE, X, Y); cout << res << '\n'; C = res; } else { // Maturação de maçãs update(0, 1, MAX_RANGE, X, Y); } } }
#Verdict Execution timeMemoryGrader output
Fetching results...