Submission #1266509

#TimeUsernameProblemLanguageResultExecution timeMemory
1266509herreinsteinMonkey and Apple-trees (IZhO12_apple)C++20
0 / 100
495 ms327680 KiB
#include <bits/stdc++.h>
#define int long long int
#define ff first
#define ss second
const int MOD = 998244353;
const int N = 2e5 + 5;
using namespace std;
struct node{
    int l, r, val, lazy;
    int L = -1, R = -1;
};
vector<node> dy;
int newnode(){
    dy.push_back({0,0,0,0,-1,-1});
    return dy.size()-1;
}
void ekle(int i){
    if(dy[i].l != dy[i].r && dy[i].L == -1){
        dy[i].L = newnode();
        dy[i].R = newnode();
        int m = (dy[i].l + dy[i].r) >> 1;
        dy[dy[i].L].l = dy[i].l;
        dy[dy[i].L].r = m;
        dy[dy[i].R].l = m+1;
        dy[dy[i].R].r = dy[i].r;
    }
}
void push(int i){
    ekle(i);
    if(dy[i].lazy == 1){
        dy[i].val = dy[i].r - dy[i].l + 1;
    }
    if(dy[i].l != dy[i].r && dy[i].lazy == 1){
        dy[dy[i].L].lazy = dy[i].lazy;
        dy[dy[i].R].lazy = dy[i].lazy;
    }
    // cout << i << " " << dy[i].l << " " << dy[i].r << " " << dy[i].val << endl;
}
void up(int i, int ql, int qr){
    push(i);
    // cout << i  << " " << dy[i].l << " " << dy[i].r << " " << ql << " " << qr << endl;
    if(dy[i].l >= ql && qr >= dy[i].r){
        dy[i].lazy = 1;
        push(i);
            // cout << i << " " << dy[i].l << " " << dy[i].r << " " << dy[i].val << endl;

        return;
    }
    if(ql > dy[i].r || qr < dy[i].l){
        return;
    }
    up(dy[i].L, ql, qr);
    up(dy[i].R, ql, qr);
    dy[i].val = dy[dy[i].L].val + dy[dy[i].R].val;
            // cout << i << " " << dy[i].l << " " << dy[i].r << " " << dy[i].val << endl;

}
int find(int i, int ql, int qr){
    push(i);
    // cout << i << " " << dy[i].l << " " << dy[i].r << " " << ql << " " << qr << " " << dy[i].val << endl;
    if(ql <= dy[i].l && qr >= dy[i].r){
        return dy[i].val;
    }
    if(ql > dy[i].r || qr < dy[i].l){
        return 0;
    }
    return find(dy[i].L, ql, qr) + find(dy[i].R, ql, qr);
}
void solve(){
    int n;
    cin >> n;
    newnode();
    newnode();
    dy[1].l = 1, dy[1].r = 1000000000;
    int e = 0;
    for(int i = 0; i < n; i++){
        int x, y, z;
        cin >> x >> y >> z;
        if(x == 2){
            up(1, y+e, z+e);
        }
        else{
            e = find(1, y+e, z+e);
            cout << e << endl;
        }
    }
}
int32_t main(){
    
    int t;
    // cin >> t;
    t = 1;
    while(t--) solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...