답안 #998402

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
998402 2024-06-14T00:04:42 Z amirhoseinfar1385 원숭이와 사과 나무 (IZhO12_apple) C++17
0 / 100
0 ms 348 KB
#include<bits/stdc++.h>
using namespace std;
int c;
struct node{
	node *cl,*cr;
	int res=0,f=0;
	node(){
		cl=cr=NULL;
		res=f=0;
	}
}rishe;

node* getl(node *u){
	if((*u).cl==NULL){
		(*u).cl=new node();
	}
	return (*u).cl;
}

node* getr(node *u){
	if((*u).cr==NULL){
		(*u).cr=new node();
	}
	return (*u).cr;
}

void upd(node *u,int l,int r,int tl,int tr){
	if(l>r||l>tr||r<tl||tl>tr||(*u).f==1){
		return ;
	}
	if(l>=tl&&r<=tr){
		(*u).cl=(*u).cr=NULL;
		(*u).res=r-l+1;
		(*u).f=1;
		return ;
	}
	int m=(l+r)>>1;
	upd(getl(u),l,m,tl,tr);
	upd(getr(u),m+1,r,tl,tr);
	(*u).res=(*getr(u)).res+((*getl(u)).res);
}

int pors(node *u,int l,int r,int tl,int tr){
	if(l>r||l>tr||r<tl||tl>tr||(*u).res==0){
		return 0;
	}
	if(((*u).f)==1){
		return min(r,tr)-max(l,tl)+1;
	}
	int m=(l+r)>>1;
	return pors(getl(u),l,m,tl,tr)+pors(getr(u),m+1,r,tl,tr);
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin>>t;
	for(int asd=0;asd<t;asd++){
		int qq;
		cin>>qq;
		int l,r;
		cin>>l>>r;
		l+=c;
		r+=c;
		if(qq==1){
			int res=pors(&rishe,0,1073741824-1,l,r);
			cout<<res<<"\n";
			c=res;
		}else{
			upd(&rishe,0,1073741824,l,r);
		}
	}
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Incorrect 0 ms 348 KB Output isn't correct
3 Halted 0 ms 0 KB -