社区讨论
线段树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 条回复,欢迎继续交流。
正在加载回复...