Submission #1163386

#TimeUsernameProblemLanguageResultExecution timeMemory
1163386canhnam357Monkey and Apple-trees (IZhO12_apple)C++17
100 / 100
157 ms67496 KiB
// source problem : #include <bits/stdc++.h> using namespace std; #define all(x) x.begin(), x.end() #define lb lower_bound #define ub upper_bound #define MASK(i) (1LL << (i)) void ckmax(int& f, int s) { f = (f > s ? f : s); } void ckmin(int& f, int s) { f = (f < s ? f : s); } const int N = 1e5; const int D = 61; int f[N * D] = {}, lc[N * D] = {}, rc[N * D] = {}, lz[N * D] = {}, cnt = 1; void down(int id, int sz) { if (!lz[id]) return; if (!lc[id]) lc[id] = cnt++; if (!rc[id]) rc[id] = cnt++; lz[lc[id]] = 1; f[lc[id]] = sz; lz[rc[id]] = 1; f[rc[id]] = sz; lz[id] = 0; } void update(int u, int v, int id = 0, int l = 1, int r = 1 << 30) { if (r < u || l > v) return; if (l >= u && r <= v) { //cout << l << ' ' << r << ' ' << id << '\n'; f[id] = r - l + 1; lz[id] = 1; return; } down(id, (r - l + 1) >> 1); int mid = (l + r) >> 1; if (mid >= u) { if (!lc[id]) lc[id] = cnt++; update(u, v, lc[id], l, mid); } if (mid + 1 <= v) { if (!rc[id]) rc[id] = cnt++; update(u, v, rc[id], mid + 1, r); } f[id] = (lc[id] ? f[lc[id]] : 0) + (rc[id] ? f[rc[id]] : 0); } int get(int u, int v, int id = 0, int l = 1, int r = 1 << 30) { if (r < u || l > v) return 0; if (l >= u && r <= v) return f[id]; down(id, (r - l + 1) >> 1); int mid = (l + r) >> 1; return (lc[id] ? get(u, v, lc[id], l, mid) : 0) + (rc[id] ? get(u, v, rc[id], mid + 1, r) : 0); } int32_t main() { ios_base::sync_with_stdio(false); cin.tie(0); int q; cin >> q; int c = 0; while (q--) { int t, l, r; cin >> t >> l >> r; l += c; r += c; if (t == 1) { c = get(l, r); cout << c << '\n'; } else update(l, r); //cout << "ROOT " << f[0] << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...