社区讨论

线段树RE 20pts 求调(玄关)

P2434[SDOI2005] 区间参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@m0qnbjol
此快照首次捕获于
2024/09/06 19:41
去年
此快照最后确认于
2024/09/06 20:29
去年
查看原帖
CPP
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 2000007
#define int long long
#define INF 0x3f3f3f3f3f3f3f3fll
int n,m,a[N];
struct tree{
	int val,lazy;
}tr[N<<2];
void push_up(int rt){
	tr[rt].val=min(tr[rt<<1].val,tr[rt<<1|1].val);
}
void push_down(int rt){
	if(tr[rt].lazy!=0){
		tr[rt<<1].lazy=tr[rt].lazy;
		tr[rt<<1|1].lazy=tr[rt].lazy;
		tr[rt<<1].val=tr[rt].lazy;
		tr[rt<<1|1].val=tr[rt].lazy;
		tr[rt].lazy=0;
	}
}

int query(int rt,int l,int r,int ql,int qr){
	if(ql<=l&&qr>=r) return tr[rt].val;
	push_down(rt);
	int mid=(l+r)>>1;
	if(qr<=mid)	return query(rt<<1,l,mid,ql,qr);
	if(ql>mid) return query((rt<<1)|1,mid+1,r,ql,qr);
	return min(query(rt<<1,l,mid,ql,qr),query((rt<<1)|1,mid+1,r,ql,qr));
}

void update(int rt,int l,int r,int ul,int ur,int add){
	if(ul<=l&&ur>=r){
		tr[rt].val=add;
		tr[rt].lazy=add;
		return;
	}
	push_down(rt);
	int mid=(l+r)>>1;
	if(ul<=mid) update(rt<<1,l,mid,ul,ur,add);
	if(ur>mid) update((rt<<1)|1,mid+1,r,ul,ur,add);
	push_up(rt);
}


void build(int rt,int l,int r){
	if(l==r) tr[rt].val=a[l];
	else{
		int mid=(l+r)>>1;
		build(rt<<1,l,mid);
		build(rt<<1|1,mid+1,r);
		push_up(rt);
	}
}

signed main(){
	cin>>n;
	for(int i=1,x,y;i<=n;++i){
		cin>>x>>y;
		update(1,0,n<<2,x*2,y*2-1,1);
	}
	int sg=0;
	for(int i=1;i<=n*4;++i){
		int ss=query(1,0,n<<2,i,i);
		if(ss==1&&ss!=sg) cout<<(i+1)/2<<' ';
		if(ss==0&&ss!=sg) cout<<(i+1)/2<<'\n';
		sg=ss;
	}
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...