只过Subtask1求调
查看原帖
只过Subtask1求调
1226952
Cosine_Func楼主2025/1/30 16:43
#include<bits/stdc++.h>
#define pb push_back
#define ll long long
#define endl '\n'
#define itn int
#define pi pair<int,int>
//#define int ll
using namespace std;
const int MOD1=1e9+7;
const int MOD2=998244353;
const int N=1e5+5;
int n,m,q,tag[N<<2][31],sum[N<<2][31];
void push_up(int p,int x){
	sum[p][x]=sum[p<<1][x]+sum[p<<1|1][x];
}
void push_down(int p,int l,int r,itn x){
	if(tag[p][x]!=0){
		if(tag[p][x]==-1){
			sum[p<<1][x]=0;
			sum[p<<1|1][x]=0;
			tag[p<<1][x]=-1;
			tag[p<<1|1][x]=-1; 
		}
		else{
			sum[p<<1][x]=tag[p][x];
			sum[p<<1|1][x]=tag[p][x];
			tag[p<<1][x]=tag[p][x];
			tag[p<<1|1][x]=tag[p][x];
		}
		tag[p][x]=0;
	}
}
void build(int p,int l,int r,int x){
	if(l==r){
		sum[p][x]=1;
		return;
	}
	int mid=l+r>>1;
	build(p<<1,l,mid,x);
	build(p<<1|1,mid+1,r,x);
	push_up(p,x);
}
void update(int p,int l,int r,int ql,int qr,int k,int x){
	if(ql<=l and r<=qr){
		sum[p][x]=k;
		tag[p][x]=(k?k:-1);
		return;
	}
	push_down(p,l,r,x);
	int mid=l+r>>1;
	if(ql<=mid)update(p<<1,l,mid,ql,qr,k,x);
	if(qr>mid)update(p<<1|1,mid+1,r,ql,qr,k,x);
	push_up(p,x);
}
int query(int p,int l,itn r,int ql,int qr,int x){
	if(ql<=l and r<=qr)return sum[p][x];
	push_down(p,l,r,x);
	int mid=l+r>>1;
	int res=0;
	if(ql<=mid)res+=query(p<<1,l,mid,ql,qr,x);
	if(qr>mid)res+=query(p<<1|1,mid+1,r,ql,qr,x);
	return res;
}
inline void Solve(){
	cin>>n>>m>>q;
	for(int i=1;i<=m;i++)
		build(1,1,n,i);
	while(q--){
		char op;
		int a,b,c;
		cin>>op>>a>>b;
		if(a>b)swap(a,b);
		if(op=='C'){
			cin>>c;
			for(int i=1;i<=m;i++)
				if(i==c)update(1,1,n,a,b,1,i);
				else update(1,1,n,a,b,0,i);
		}
		if(op=='P'){
			int res=0;
			for(int i=1;i<=m;i++)
				res+=query(1,1,n,a,b,i)?1:0;
			cout<<res<<endl;
		}
	}
}
signed main()
{
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    //freopen(".in","r",stdin);
    //freopen(".out","w",stdout);
    int T=1;
    //cin>>T;
    while(T--)
    	Solve();
    return 0;
}
2025/1/30 16:43
加载中...