全部WA,实在找不出错
  • 板块P1558 色板游戏
  • 楼主ZeroF
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/8/3 11:04
  • 上次更新2023/11/3 06:12:32
查看原帖
全部WA,实在找不出错
385165
ZeroF楼主2023/8/3 11:04
#include<bits/stdc++.h>
using namespace std;
struct Node{
	int l,r,mx,lazytag;
}tree[28][400010];
void pushup(int p,int num){
	tree[num][p].mx=tree[num][p*2].mx+tree[num][p*2+1].mx;
}
void build(int p,int l,int r,int num){
	tree[num][p].l=l,tree[num][p].r=r;
	if(l==r){
		if(num==1)tree[num][p].mx=11;
		else tree[num][p].mx=0;
		return;
	}
	int mid=(l+r)/2;
	build(p*2,l,mid,num);
	build(p*2+1,mid+1,r,num);
	pushup(p,num);
}
void pushdown(int p,int num){
	int mid=(tree[num][p].l+tree[num][p].r)/2;
	tree[num][p*2].mx=tree[num][p].lazytag*(mid-tree[num][p].l+1);
	tree[num][p*2+1].mx=tree[num][p].lazytag*(tree[num][p].r-mid);
	tree[num][p*2].lazytag=tree[num][p].lazytag;
	tree[num][p*2+1].lazytag=tree[num][p].lazytag;
	tree[num][p].lazytag=0;
}
int query(int p,int L,int R,int num){
	if(tree[num][p].l>=L&&tree[num][p].r<=R){
		return tree[num][p].mx;
	}
	pushdown(p,num);
	int mid=(tree[num][p].l+tree[num][p].r)/2;
	int ans=0;
	if(mid>=L){
		ans+=query(p*2,L,R,num);
	}
	if(mid<R){
		ans+=query(p*2+1,L,R,num);
	}
	return ans;
}
void modify(int p,int L,int R,int val,int num){
	if(tree[num][p].l>=L&&tree[num][p].r<=R){
		tree[num][p].mx=val*(tree[num][p].r-tree[num][p].l+1);
		tree[num][p].lazytag=val;
		return;
	}
	pushdown(p,num);
	int mid=(tree[num][p].l+tree[num][p].r)/2;
	if(mid>=L){
		modify(p*2,L,R,val,num);
	}
	if(mid<R){
		modify(p*2+1,L,R,val,num);
	}
	pushup(p,num);
}
int main(){
	int l,t,o;
	cin>>l>>t>>o;
	for(int i=1;i<=t;i++){
		build(1,1,l,i);
	}
	for(int i=1;i<=o;i++){
		char op;
		cin>>op;
		if(op=='C'){
			int x,y,z;
			cin>>x>>y>>z;
			if(x>y)swap(x,y);
			for(int i=1;i<=t;i++){
				if(i!=z){
					modify(1,x,y,0,i);
				}
				else modify(1,x,y,11,i);
			}
		}
		else{
			int ans=0;
			int x,y;
			cin>>x>>y;
			if(x>y)swap(x,y);
			for(int i=1;i<=t;i++){
				if(query(1,x,y,i))ans++;
			}
			cout<<ans<<endl;
		}
	}
	return 0;
}
2023/8/3 11:04
加载中...