Submission #164996

#TimeUsernameProblemLanguageResultExecution timeMemory
164996shashwatchandra원숭이와 사과 나무 (IZhO12_apple)C++14
100 / 100
787 ms262144 KiB
/*input
6
2 1 7
2 10 12
1 7 11
2 11 13
1 8 10
1 15 17
*/
#include <iostream> 
using namespace std;

struct node{
	node* left,*right;
	int cnt;
	bool lazy = 0;
	node(){
		cnt = 0;
		lazy = 0;
		left = NULL;
		right = NULL;
	}
	void extend(){
		left = new node();
		right = new node();
	}
};
 
node* root = new node();
 
#define mid (l+r)/2
 
void upd(node* cur,int l,int r,int start,int end){
	if(cur->lazy)cur->cnt = r-l+1;
	if(l != r and cur->lazy){
		if(cur->left == NULL)cur->extend();
		cur->left->lazy = 1;
		cur->right->lazy = 1;
	}
	cur->lazy = 0;
	if(l > end or start > r)return;
	if(start<= l and r <= end){
		if(cur->cnt == r-l+1)return;
		cur->lazy = 1;
		if(cur->lazy)cur->cnt = r-l+1;
		if(l != r and cur->lazy){
			if(cur->left == NULL)cur->extend();
			cur->left->lazy = 1;
			cur->right->lazy = 1;
		}
		cur->lazy = 0;
		return;
	}
	if(cur->left == NULL)cur->extend();
	upd(cur->left,l,mid,start,end);
	upd(cur->right,mid+1,r,start,end);
	cur->cnt = cur->left->cnt+cur->right->cnt;
}
 
int query(node *cur,int l,int r,int start,int end){
	if(cur->lazy)cur->cnt = r-l+1;
	if(l != r and cur->lazy){
		if(cur->left == NULL)cur->extend();
		cur->left->lazy = 1;
		cur->right->lazy = 1;
	}
	cur->lazy = 0;
	if(l > end or start > r)return 0;
	if(start<= l and r <= end){
		return cur->cnt;
	}
	if(cur->left == NULL)cur->extend();
	return query(cur->left,l,mid,start,end)+
	query(cur->right,mid+1,r,start,end);
}
 
int upper = 1e9;
int q;
int c = 0;
 
void solve(){
  	cin >> q;
  	while(q--){
  		int ty,x,y;cin >> ty >> x >> y;
  		x += c;
  		y += c;
  		if(ty == 2){
  			upd(root,1,upper,x,y);
  		}
  		else{
  			int ans =query(root,1,upper,x,y);
  			cout << ans << "\n";
  			c = ans;
  		}
  	}
}
 
signed main(){
  ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
  //freopen(".in","r",stdin);freopen(".out","w",stdout);
  int t = 1;
  //cin >> t;
  while(t--){
    solve();
  }
  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...