Submission #493319

# Submission time Handle Problem Language Result Execution time Memory
493319 2021-12-11T01:27:52 Z dooompy Monkey and Apple-trees (IZhO12_apple) C++17
100 / 100
384 ms 188596 KB
#include "bits/stdc++.h"

using namespace std;

using ll = long long;

struct Node {
    int sum, lazy, tl, tr, l, r;
    Node() : sum(0), lazy(0), l(-1), r(-1) {}
};

const int MAXN = 123456;
Node segtree[64 * MAXN];
int cnt = 2;

void push_lazy(int node) {
    if (segtree[node].lazy) {
        segtree[node].sum = segtree[node].tr - segtree[node].tl + 1;
        int mid = (segtree[node].tl + segtree[node].tr) / 2;
        if (segtree[node].l == -1) {
            segtree[node].l = cnt++;
            segtree[segtree[node].l].tl = segtree[node].tl;
            segtree[segtree[node].l].tr = mid;
        }
        if (segtree[node].r == -1) {
            segtree[node].r = cnt++;
            segtree[segtree[node].r].tl = mid + 1;
            segtree[segtree[node].r].tr = segtree[node].tr;
        }
        segtree[segtree[node].l].lazy = segtree[segtree[node].r].lazy = 1;
        segtree[node].lazy = 0;
    }
}

void update(int node, int l, int r) {
    push_lazy(node);
    if (l == segtree[node].tl && r == segtree[node].tr) {
        segtree[node].lazy = 1;
        push_lazy(node);
    } else {
        int mid = (segtree[node].tl + segtree[node].tr) / 2;
        if (segtree[node].l == -1) {
            segtree[node].l = cnt++;
            segtree[segtree[node].l].tl = segtree[node].tl;
            segtree[segtree[node].l].tr = mid;
        }
        if (segtree[node].r == -1) {
            segtree[node].r = cnt++;
            segtree[segtree[node].r].tl = mid + 1;
            segtree[segtree[node].r].tr = segtree[node].tr;
        }

        if (l > mid) update(segtree[node].r, l, r);
        else if (r <= mid) update(segtree[node].l, l, r);
        else {
            update(segtree[node].l, l, mid);
            update(segtree[node].r, mid + 1, r);
        }

        push_lazy(segtree[node].l);
        push_lazy(segtree[node].r);
        segtree[node].sum = segtree[segtree[node].l].sum + segtree[segtree[node].r].sum;
    }
}

int query(int node, int l, int r) {
    push_lazy(node);
    if (l == segtree[node].tl && r == segtree[node].tr) {
        return segtree[node].sum;
    } else {
        int mid = (segtree[node].tl + segtree[node].tr) / 2;
        if (segtree[node].l == -1) {
            segtree[node].l = cnt++;
            segtree[segtree[node].l].tl = segtree[node].tl;
            segtree[segtree[node].l].tr = mid;
        }
        if (segtree[node].r == -1) {
            segtree[node].r = cnt++;
            segtree[segtree[node].r].tl = mid + 1;
            segtree[segtree[node].r].tr = segtree[node].tr;
        }

        if (l > mid) return query(segtree[node].r, l, r);
        else if (r <= mid) return query(segtree[node].l, l, r);
        else return query(segtree[node].l, l, mid) + query(segtree[node].r, mid + 1, r);
    }
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
//    freopen("", "r", stdin);
//    freopen("", "w", stdout);
    int m; cin >> m;

    segtree[1].sum = 0; segtree[1].lazy = 0;
    segtree[1].tl = 1; segtree[1].tr = 1e9;

    int c = 0;
    for (int i = 0; i < m; i++) {
        int d, x, y; cin >> d >> x >> y;
        if (d == 1) {
            c = query(1, x + c, y + c);
            cout << c << "\n";
        } else {
            update(1, x + c, y + c);
        }
    }
}
# Verdict Execution time Memory Grader output
1 Correct 78 ms 185780 KB Output is correct
2 Correct 74 ms 185744 KB Output is correct
3 Correct 76 ms 185964 KB Output is correct
4 Correct 86 ms 185884 KB Output is correct
5 Correct 89 ms 185936 KB Output is correct
6 Correct 89 ms 185960 KB Output is correct
7 Correct 90 ms 185984 KB Output is correct
8 Correct 183 ms 187056 KB Output is correct
9 Correct 298 ms 187928 KB Output is correct
10 Correct 322 ms 188080 KB Output is correct
11 Correct 314 ms 187972 KB Output is correct
12 Correct 305 ms 187976 KB Output is correct
13 Correct 281 ms 188464 KB Output is correct
14 Correct 286 ms 188288 KB Output is correct
15 Correct 384 ms 188596 KB Output is correct
16 Correct 383 ms 188480 KB Output is correct
17 Correct 283 ms 188508 KB Output is correct
18 Correct 291 ms 188356 KB Output is correct
19 Correct 373 ms 188400 KB Output is correct
20 Correct 381 ms 188500 KB Output is correct