Submission #1275261

#TimeUsernameProblemLanguageResultExecution timeMemory
1275261ibrahim001Monkey and Apple-trees (IZhO12_apple)C++20
100 / 100
253 ms130692 KiB
#include <bits/stdc++.h>
#define intt long long
#define F first
#define S second
#define pii pair<int,int>
#define pll pair<intt,intt>
#define ld long double
// #define int intt
#define endl '\n'
#define fastio ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define all(x) x.begin(), x.end()
using namespace std;
const int sz = (1e5+5)*100;
const int inf = 1e9+7;
const intt infl = 1e18;
const int mod = 1e9+7;
const ld eps = 1e-9;
int st[sz], L[sz], R[sz], lz[sz];
int last = 1;
void extend(int in){
    if ( L[in] ) return;
    L[in] = ++last;
    R[in] = ++last;
    assert(last < sz);
}
void relax(int l, int r, int in){
    if ( !lz[in] )   return;
    st[in] = r-l+1;
    if ( l != r )   extend(in);
    lz[L[in]] = lz[R[in]] = 1;
    lz[in] = 0;
}
void update(int a, int b, int l, int r, int in){
    // cout << "in " << in << " [" << l << " " << r << "]" << endl;
    // cout << L[in] << " " << R[in] << endl;
    relax(l, r, in);
    if ( b < l or r < a )   return;
    if ( a <= l and r <= b ){
        lz[in] = 1;
        relax(l, r, in);
        return;
    }
    int mid = (l+r)>>1;
    extend(in);
    update(a, b, l, mid, L[in]);
    update(a, b, mid+1, r, R[in]);
    st[in] = st[L[in]]+st[R[in]];
    // cout << l << " " << r << " : " << st[in] << endl;
}
int getans(int a, int b, int l, int r, int in){
    // cout << a << " " << b << " : " << l << " " << r << endl;
    if ( !in )  return 0;
    relax(l, r, in);
    if ( b < l or r < a )   return 0;
    if ( a <= l and r <= b ){
        // cout << "res = " << st[in] << endl;
        return st[in];
    }
    int mid = (l+r)>>1;
    return  (L[in] ? getans(a, b, l, mid, L[in]) : 0)+
            (R[in] ? getans(a, b, mid+1, r, R[in]) : 0);
}
int i,j;
void solve(){
    int n = 1e9+1, c = 0;
    int t;
    cin >> t;
    while (t--){
        int d, x, y;
        cin >> d >> x >> y;
        x += c;
        y += c;
        assert(x<=y);
        if ( d == 1 ){
            int res = getans(x, y, 1, n, 1);
            cout << res << endl;
            c = res;
        }
        else{
            update(x, y, 1, n, 1);
        }
    }
}
signed main(){
    fastio;
    int t=1;
    // cin >> t;
    while ( t-- ){
        solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...