제출 #1256717

#제출 시각아이디문제언어결과실행 시간메모리
1256717kerem원숭이와 사과 나무 (IZhO12_apple)C++20
100 / 100
23 ms840 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fr first
#define sc second
#define pb push_back
#define all(x) x.begin(),x.end()
#define sp << " " <<
#define inf 1e15
#define N 1000
 
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
typedef tuple<int,int,int> tiii;
typedef pair<int,int> pii;

struct Node{
	Node *l,*r;
	int val;
	Node(){
		val=0;
		l=0;r=0;
	}
};
int c=0;
Node *root=new Node();

void update(Node *node,int l,int r,int ql,int qr){
	if(r<ql || qr<l) return;
	//~ cout << l sp r << "\n";
	if(ql<=l && r<=qr){
		node->val=r-l+1;
		return;
	}
	if(node->val) return;
	int mid=(l+r)/2;
	if(mid>=ql && !node->l) node->l=new Node(); 
	if(mid+1<=qr && !node->r) node->r=new Node();
	update(node->l,l,mid,ql,qr);
	update(node->r,mid+1,r,ql,qr);
}
int query(Node *node,int l,int r,int ql,int qr){
	if(r<ql || qr<l || !node) return 0;
	if(node->val)
		return min(r,qr)-max(l,ql)+1;
	int mid=(l+r)/2;
	return query(node->l,l,mid,ql,qr)+query(node->r,mid+1,r,ql,qr);
}
void solve(){
	int t,x,y;
	cin >> t >> x >> y;
	if(t==1){
		c=query(root,1,1e9,x+c,y+c);
		cout << c << "\n";
	}
	if(t==2)
		update(root,1,1e9,x+c,y+c);
}
int32_t main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);cout.tie(NULL);
	
	int test=1;
	cin >> test;
	while(test--) solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...