社区讨论
求助,全wa
P1558色板游戏参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @m424zfwh
- 此快照首次捕获于
- 2024/11/29 10:40 去年
- 此快照最后确认于
- 2025/11/04 13:41 4 个月前
CPP
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <math.h>
#include <string.h>
#include <queue>
#include <vector>
#include <map>
using namespace std;
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define maxn 500005
inline int read(){
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
int n,c,m;
int val[maxn];
int k;
int nowl,nowr;
int tag[maxn];
int sum[maxn];
void update(int rt){
sum[rt]=sum[rt<<1]|sum[rt<<1|1];
return;
}
void build(int l,int r,int rt){
if(l==r){
sum[rt]=1<<1;
return;
}
int mid=(l+r)>>1;
build(lson);
build(rson);
update(rt);
return;
}
void color(int l,int r,int rt,int c){
sum[rt]=(1<<c);
tag[rt]=c;
return;
}
void push_color(int l,int r,int rt){
if(tag[rt]){
int mid=(l+r)>>1;
color(lson,tag[rt]);
color(rson,tag[rt]);
tag[rt]=0;
}
return;
}
void change(int l,int r,int rt,int c){
if(l>=nowl&&r<=nowr){
color(l,r,rt,c);
return;
}
push_color(l,r,rt);
int mid=(l+r)>>1;
if(mid>=nowl) change(lson,c);
if(mid+1<=nowr) change(rson,c);
update(rt);
return;
}
int fin(int l,int r,int rt){
if(l>=nowl&&r<=nowr){
return sum[rt];
}
push_color(l,r,rt);
int ans=0;
int mid=(l+r)>>1;
if(mid>=nowl) ans|=fin(lson);
if(mid+1<=nowr) ans|=fin(rson);
return ans;
}
int main(){
n=read();c=read();m=read();
build(1,n,1);
for(int i=1;i<=m;++i){
char opt;scanf("%c",&opt);
if(opt=='C'){
int u,v,c;u=read();v=read();c=read();
if(u>v) swap(u,v);
nowl=u;nowr=v;
change(1,n,1,c);
}
else{
int u,v,c;u=read();v=read();
if(u>v) swap(u,v);
nowl=u;nowr=v;
int w=fin(1,n,1);
int ans=0;
for(int i=1;i<=c;++i) if(w&(1<<i)) ++ans;
cout<<ans<<endl;
}
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...