#include <bits/stdc++.h>
using namespace std;
 
#define int long long
#define OYY LLONG_MAX
#define faster ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define fi first
#define se second
#define FOR for(int i=1;i<=n;i++)
#define mid (start+end)/2
#define pb push_back
#define lim 100005
#define N 1e9
struct Node{
	Node *left,*right;
	int val;
	
	Node(){
		val=0;
		left=NULL;
		right=NULL;
	}
};
inline bool check(int l1,int r1,int l2,int r2){
	int ll=max(l1,l2);
	int rr=min(r1,r2);
	return ll<=rr;
}
inline int ara(int l1,int r1,int l2,int r2){
	int ll=max(l1,l2);
	int rr=min(r1,r2);
	return rr-ll+1;
}
inline void update(Node *node,int start,int end,int l,int r,int val){
	if(node==NULL || start>end || start>r || end<l)return ;
	//cout<<node->val<<" "<<l<<" "<<r<<" "<<start<<" "<<end<<endl;
	if(start>=l && end<=r){
		node->val=end-start+1;
		return ;
	}
	if(check(l,r,start,mid)){
		if(node->left==NULL){
			node->left=new Node();
			if(node->val==end-start+1)node->left->val=mid-start+1;
		}
		update(node->left,start,mid,l,r,val);
	}
	if(check(l,r,mid+1,end)){
		if(node->right==NULL){
			node->right=new Node();
			if(node->val==end-start+1)node->right->val=end-(mid+1)+1;
		}
		update(node->right,mid+1,end,l,r,val);
	}
	if(node->val==end-start+1)return;
	node->val=0;
	if(node->left!=NULL)node->val+=node->left->val;
	if(node->right!=NULL)node->val+=node->right->val;
	//cout<<node->val<<" "<<start<<" "<<end<<" "<<l<<" "<<r<<endl;
}
inline int query(Node *node,int start,int end,int l,int r){
	if(node==NULL || start>end || start>r || end<l)return 0;
	//cout<<node->val<<" "<<start<<" "<<end<<" "<<l<<" "<<r<<endl;
	if(node->val==end-start+1){
		return ara(start,end,l,r);
	}
	if(start>=l && end<=r){
		return node->val;
	}
	return query(node->left,start,mid,l,r)+query(node->right,mid+1,end,l,r);
}
int32_t main(){
	faster
	int q;cin>>q;
	int c=0;
	Node *root=new Node();
	while(q--){
		int ty;cin>>ty;
		int l,r;cin>>l>>r;
		l+=c;
		r+=c;
		if(ty==1){
			int cev=query(root,1,N,l,r);
			cout<<cev<<'\n';
			c=cev;
		}
		else{
			update(root,1,N,l,r,1);
		}
	}
	return 0;	
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |