Submission #1198411

#TimeUsernameProblemLanguageResultExecution timeMemory
1198411khalwshMonkey and Apple-trees (IZhO12_apple)C++20
0 / 100
398 ms327680 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

const ll SZ = 1'000'000'000LL;

struct dynamicSeg {
    ll sum = 0;
    bool lazy = false;
    dynamicSeg *L = nullptr, *R = nullptr;

    void prop(ll nl, ll nr) {
        if (!lazy) return;
        // mark this node fully “ripe”
        sum = (nr - nl + 1);
        if (nl != nr) {
            if (!L) L = new dynamicSeg();
            if (!R) R = new dynamicSeg();
            L->lazy = R->lazy = true;
        }
        lazy = false;
    }

    void add(ll nl, ll nr, ll ql, ll qr) {
        prop(nl, nr);
        if (nl > qr || nr < ql) return;
        if (nl >= ql && nr <= qr) {
            // full cover: set the flag and immediately apply it
            lazy = true;
            prop(nl, nr);
            return;
        }
        ll mid = nl + (nr - nl) / 2;
        if (!L) L = new dynamicSeg();
        if (!R) R = new dynamicSeg();
        L->add(nl, mid, ql, qr);
        R->add(mid+1, nr, ql, qr);
        sum = L->sum + R->sum;
    }

    ll query(ll nl, ll nr, ll ql, ll qr) {
        prop(nl, nr);
        if (nl > qr || nr < ql) return 0;
        if (nl >= ql && nr <= qr) return sum;
        ll mid = nl + (nr - nl) / 2;
        ll leftSum  = L ? L->query(nl, mid, ql, qr) : 0;
        ll rightSum = R ? R->query(mid+1, nr, ql, qr) : 0;
        return leftSum + rightSum;
    }
};

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int M;
    cin >> M;

    dynamicSeg dseg;
    ll C = 0;

    while(M--){
        int D;
        ll X, Y;
        cin >> D >> X >> Y;
        ll l = X + C;
        ll r = Y + C;
        // now 1 ≤ l,r ≤ 1e9 guaranteed

        if (D == 2) {
            dseg.add(1, SZ, l, r);
        } else {
            ll ans = dseg.query(1, SZ, l, r);
            cout << ans << "\n";
            C = ans;
        }
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...