제출 #1366100

#제출 시각아이디문제언어결과실행 시간메모리
1366100jenterjongle45원숭이와 사과 나무 (IZhO12_apple)C++20
0 / 100
2100 ms134932 KiB
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int,int>;
map<ll,int> mp,lz;
struct segment{
    void flush(int il,int ir,int now){
        if(lz[now]==0) return;
        mp[now]=ir-il+1;
        if(il!=ir){
            int mid=(il+ir)/2;
            lz[now<<1]=1;
            lz[now<<1|1]=1;
        }
        lz[now]=0;
    }
    void upd(int il,int ir,int l,int r,int now){
        flush(il,ir,now);
        if(ir<l||il>r) return;
        if(l<=il&&ir<=r){
            lz[now]=1;
            flush(il,ir,now);
            return;
        }
        int mid=(il+ir)>>1;
        upd(il,mid,l,r,now<<1);
        upd(mid+1,ir,l,r,now<<1|1);
        mp[now]=mp[now<<1]+mp[now<<1|1];
        // cout<<il<<' '<<ir<<' '<<mp[{il,ir}]<<'\n';
    }
    void upd(int l,int r){upd(1,1e9,l,r,1);}
    ll qry(int il,int ir,int l,int r,int now){
        flush(il,ir,now);
        if(ir<l||il>r) return 0;
        if(l<=il&&ir<=r){
            return mp[now];
        }
        int mid=(il+ir)>>1;
        return qry(il,mid,l,r,now<<1)+qry(mid+1,ir,l,r,now<<1|1);
    }
    ll qry(int l,int r){return qry(1,1e9,l,r,1);}
}t;
int main(){
    cin.tie(0)->sync_with_stdio(0);
    int m;cin>>m;
    int now=0;
    while(m--){
        int opr,x,y;cin>>opr>>x>>y;
        if(opr==1){
            int tmp=t.qry(x+now,y+now);
            cout<<tmp<<'\n';
            now=tmp;
        }
        else t.upd(x+now,y+now);
    }
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…