全WA求助,悬棺
  • 板块P1558 色板游戏
  • 楼主mlvx
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/5/9 16:03
  • 上次更新2024/5/9 19:39:09
查看原帖
全WA求助,悬棺
1248522
mlvx楼主2024/5/9 16:03
#include<bits/stdc++.h>
using namespace std;
#define pl (p<<1)
#define pr (p<<1|1)
const int T=31,N=1e5+10;
struct Tree{int sum,cov;}tr[T][N<<2];
int n,t,q,a,b,c;char op;
void push_down(int x,int p){tr[x][pl].sum=tr[x][p].cov,tr[x][pr].sum=tr[x][p].cov,tr[x][pl].cov=tr[x][p].cov,tr[x][pr].cov=tr[x][p].cov,tr[x][p].cov=0;}
void push_up(int x,int p){tr[x][p].sum=tr[x][pl].sum+tr[x][pr].sum;}
void update(int x,int l,int r,int le,int ri,int v,int p){
	if(l>=le&&r<=ri)return void(tr[x][p].cov=tr[x][p].sum=v);
	int mid=l+r>>1;push_down(x,p);
	if(le<=mid)update(x,l,mid,le,ri,v,pl);
	if(ri>mid)update(x,mid+1,r,le,ri,v,pr);
	push_up(x,p);
}int query(int x,int l,int r,int le,int ri,int p){
	if(l>=le&&r<=ri)return tr[x][p].sum;
	int mid=l+r>>1,ret=0;push_down(x,p);
	if(le<=mid)ret+=query(x,l,mid,le,ri,pl);
	if(ri>mid)ret+=query(x,mid+1,r,le,ri,pr);
	return push_up(x,p),ret;
}int main(){
    cin>>n>>t>>q,update(1,1,n,1,n,1,1);
    while(q--){
		cin>>op>>a>>b;if(a>b)swap(a,b);
		if(op=='C'){
			cin>>c;
			for(int i=1;i<=t;i++)update(i,1,n,a,b,i==c,1);
		}else{
			int ans=0;
			for(int i=1;i<=t;i++)if(query(i,1,n,a,b,1))ans++;
			cout<<ans<<'\n'; 
		}
    }return 0;
}
2024/5/9 16:03
加载中...