#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef long double ld;
#define F first
#define S second
#define pb push_back
#define endl '\n'
#define Mp make_pair
#define all(x) x.begin(), x.end()
#define debug(x) cerr << #x << " = " << x << endl;
#define fast_io ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define file_io freopen("input19.txt" , "r" , stdin) ;
const int INF=1e1;
struct Node{
Node *lc, *rc;
int sum=0;
Node():lc(NULL), rc(NULL), sum(0){}
};
Node *root=new Node();
void upd(int lx, int rx, int l=1, int r=INF+1, Node *seg=root){
if(lx>=r || rx<=l || seg->sum==r-l) return;
if(lx<=l && rx>=r){
seg->sum=r-l;
return;
}
int mid=(r+l)>>1;
if(!seg->lc) seg->lc=new Node();
if(!seg->rc) seg->rc=new Node();
upd(lx, rx, l, mid, seg->lc); upd(lx, rx, mid, r, seg->rc);
seg->sum=seg->lc->sum+seg->rc->sum;
}
int get(int lx, int rx, int l=1, int r=INF+1, Node *seg=root){
if(lx>=r || rx<=l || !seg->sum) return 0;
if(lx<=l && rx>=r)return seg->sum;
int mid=(r+l)>>1;
if(seg->sum==r-l)return min(rx, r)-max(lx, l);
return get(lx, rx, l, mid, seg->lc)+get(lx, rx, mid, r, seg->rc);
}
int main()
{
fast_io
int c=0;
int q; cin>>q;
while(q--){
int t; cin>>t;
if(t==1){
int l, r; cin>>l>>r;
l+=c; r+=c;
c=get(l, r+1);
cout<<c<<endl;
}
else{
int l, r; cin>>l>>r;
l+=c; r+=c;
upd(l, r+1);
}
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |