社区讨论

建议加强数据

P3740[HAOI2014] 贴海报参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@miufropi
此快照首次捕获于
2025/12/06 23:16
2 个月前
此快照最后确认于
2025/12/09 18:15
2 个月前
查看原帖
裸线段树直接艹过去了
CPP
#include<bits/stdc++.h>
using namespace std;
#define debug() cerr<<"I Will AK\n"
#define N 200007
struct tree{
	short val,lazy;
}tr[10000000<<2];
int b[N],l[N],r[N];
int a[N],n,q;
short c[10000000];
int t[100000];
void push_up(int rt){
	tr[rt].val=tr[rt<<1].val+tr[rt<<1|1].val;
}
void push_down(int rt,int l,int r){
	if(tr[rt].lazy!=0){
		tr[rt<<1].lazy=tr[rt].lazy;
		tr[rt<<1|1].lazy=tr[rt].lazy;
		int mid=(l+r)>>1;
		tr[rt<<1].val=tr[rt].lazy*(mid-l+1);
		tr[rt<<1|1].val=tr[rt].lazy*(r-mid);
		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,l,r);
	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 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*(r-l+1);
		tr[rt].lazy=add;
		return;
	}
	push_down(rt,l,r);
	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=0;
	else{
		int mid=(l+r)>>1;
		build(rt<<1,l,mid);
		build(rt<<1|1,mid+1,r);
		push_up(rt);
	}
}
void out(int rt,int l,int r){
	if(l==r) c[l]=tr[rt].val;
	else{
		int mid=(l+r)>>1;
		push_down(rt,l,r);
		out(rt<<1,l,mid);
		out(rt<<1|1,mid+1,r);
	}
}
signed main(){
	//freopen("1.in","r",stdin);
	//freopen(".out","w",stdout);
	int n,m;
	cin>>m;
	cin>>n;
	int cnt=0,tot=0;
	for(int i=1;i<=n;++i){
		cin>>l[i]>>r[i];
		update(1,1,m,l[i],r[i],i);
	}
	out(1,1,m);
	for(int i=1;i<=10000000;++i){
		t[c[i]]++;
	}
	int ans=0;
	for(int i=1;i<=1000;++i){
		if(t[i]) ++ans;
	}
	cout<<ans;
	
	return 0;
}
4 可以看到,只是加了几个short而已

回复

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

正在加载回复...