Submission #1198410

#TimeUsernameProblemLanguageResultExecution timeMemory
1198410khalwshMonkey and Apple-trees (IZhO12_apple)C++20
0 / 100
378 ms254416 KiB
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

void PRE() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
// #ifndef ONLINE_JUDGE
//     freopen("in.txt", "r", stdin);
//     freopen("out.txt", "w", stdout);
//     freopen("error.txt", "w", stderr);
// #endif
}
int n , q;
const int sz = 1e9;
struct dynamicSeg {
    int sum = 0;
    bool lazy = false;
    dynamicSeg *L = nullptr, *R = nullptr;

    void prop(int nl, int nr) {
        if (!lazy) return;
        // mark this entire node as all-1
        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(int nl, int nr, int i, int j) {
        prop(nl, nr);
        if (nl > j || nr < i) return;
        if (nl >= i && nr <= j) {
            // full cover: mark lazy, then do a prop
            lazy = true;
            prop(nl, nr);
            return;
        }
        int mid = nl + (nr - nl) / 2;
        if (!L) L = new dynamicSeg();
        if (!R) R = new dynamicSeg();
        L->add(nl, mid, i, j);
        R->add(mid+1, nr, i, j);
        sum = L->sum + R->sum;
    }

    int query(int nl, int nr, int l, int r) {
        prop(nl, nr);
        if (nl > r || nr < l) return 0;
        if (nl >= l && nr <= r) return sum;
        int mid = nl + (nr - nl) / 2;
        return (L ? L->query(nl, mid, l, r) : 0)
             + (R ? R->query(mid+1, nr, l, r) : 0);
    }
};

int main() {
    PRE();
    int n;cin>>n;
    dynamicSeg dseg;
    int c = 0;
    for (int i = 0;i < n;i++) {
        int d;cin>>d;
        int l , r;cin>>l>>r;
        l += c , r += c;
        if (d == 1) {
            c = dseg.query(0 , sz - 1 , l , r);
            cout<<c<<'\n';
        }else {
            dseg.add(0 , sz - 1 , l , r);
        }
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...