Submission #1262721

#TimeUsernameProblemLanguageResultExecution timeMemory
1262721papauloMonkey and Apple-trees (IZhO12_apple)C++20
100 / 100
232 ms144512 KiB
#include <bits/stdc++.h>
using namespace std;

struct Node {
    int val, lazy;
    Node *left, *right;
    Node() : val(0), lazy(0), left(nullptr), right(nullptr) {}
    void gen() {
        if(left) return;
        left=new Node();
        right=new Node();
    }
    void lazyPropagation(int l, int r) {
        if(!lazy) return;
        int sz=(r-l+1);
        val=sz;
        if(l<r) {
            gen();
            left->lazy=right->lazy=lazy;
        }
        this->lazy=0;
    }
    void update(int l, int r, int p, int q) {
        lazyPropagation(l, r);
        int sz=(r-l+1);
        if(val==sz) return;
        if(l>q||p>r) return;
        if(l>=p&&r<=q) {
            this->lazy=1;
            lazyPropagation(l, r);
            return;
        }
        gen();
        int mid=(l+r)/2;
        left->update(l, mid, p, q);
        right->update(mid+1, r, p, q);
        this->val=left->val+right->val;
    }
    int query(int l, int r, int p, int q) {
        lazyPropagation(l, r);
        if(l>q||p>r) return 0;
        if(l>=p&&r<=q) return val;
        gen();
        int mid=(l+r)/2;
        return left->query(l, mid, p, q)+right->query(mid+1, r, p, q);
    }
};

int main() {
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    int m;
    cin >> m;
    Node nd;
    int c=0;
    ostringstream out;
    while(m--) {
        int d, x, y;
        cin >> d >> x >> y;
        if(d==1) {
            int val=nd.query(1, 1e9, x+c, y+c);
            c=val;
            out << val << endl;
        } else {
            nd.update(1, 1e9, x+c, y+c);
        }
    }
    cout << out.str();
}
#Verdict Execution timeMemoryGrader output
Fetching results...