社区讨论
RE,本地可以通过第一个点
P1558色板游戏参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mhjt1nap
- 此快照首次捕获于
- 2025/11/04 08:02 4 个月前
- 此快照最后确认于
- 2025/11/04 08:02 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
char OUT[105];
int in(){int k=0,f=1;char c=getchar();while (c<'0'||c>'9'){if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9'){k=k*10+c-'0';c=getchar();}return k*f;}
void out(int x){int R_OUT=0;if (x<0) putchar('-'),x=-x;while (x) R_OUT++,OUT[R_OUT]=x%10+'0',x/=10;for (int i=R_OUT;i>=1;i--) putchar(OUT[i]);}
int t,n,m,a,x,y,z,k,ans,sum;
char op;
struct tree{
int l,r,lazy;
bool wei;
}tree[35][800005];
void pushdown(int z)
{
tree[a][z<<1].lazy=tree[a][z].lazy;
tree[a][z<<1|1].lazy=tree[a][z].lazy;
if (tree[a][z].lazy==1)
{
tree[a][z<<1].wei=1;
tree[a][z<<1|1].wei=1;
}
else
{
tree[a][z<<1].wei=0;
tree[a][z<<1|1].wei=0;
}
tree[a][z].lazy=0;
}
void build(int l,int r,int z)
{
tree[a][z].l=l;tree[a][z].r=r;
if (l==r) return;
int mid=(l+r)>>1;
build(l,mid,z<<1);
build(mid+1,r,z<<1|1);
}
void build1(int l,int r,int z)
{
tree[1][z].l=l;tree[1][z].r=r;tree[1][z].wei=1;
if (l==r) return;
int mid=(l+r)>>1;
build1(l,mid,z<<1);
build1(mid+1,r,z<<1|1);
}
void update(int l,int r,int z)
{
if (l==tree[a][z].l&&r==tree[a][z].r)
{
tree[a][z].lazy=k;
if (k>0) tree[a][z].wei=1;
else tree[a][z].wei=0;
return;
}
if (tree[a][z].lazy!=0) pushdown(z);
int mid=(tree[a][z].l+tree[a][z].r)>>1;
if (r<=mid) update(l,r,z<<1);
else if (l>mid) update(l,r,z<<1|1);
else update(l,mid,z<<1),update(mid+1,r,z<<1|1);
tree[a][z].wei=tree[a][z<<1].wei|tree[a][z<<1|1].wei;
}
void query(int l,int r,int z)
{
if (ans) return;
if (l==tree[a][z].l&&r==tree[a][z].r)
{
ans|=tree[a][z].wei;
return;
}
if (tree[a][z].lazy!=0) pushdown(z);
int mid=(tree[a][z].l+tree[a][z].r)>>1;
if (r<=mid) query(l,r,z<<1);
else if (l>mid) query(l,r,z<<1|1);
else query(l,mid,z<<1),query(mid+1,r,z<<1|1);
tree[a][z].wei=tree[a][z<<1].wei|tree[a][z<<1|1].wei;
}
signed main()
{
// freopen("dp.in","r",stdin);
// freopen("dp.out","w",stdout);
n=in();t=in();m=in();
build1(1,n,1);
for (a=2;a<=t;a++) build(1,n,1);
for (int i=1;i<=m;i++)
{
op=getchar();
if (op=='C')
{
x=in();y=in();z=in();
if (x>y) swap(x,y);
k=-1;
for (a=1;a<z;a++) update(x,y,1);
for (a=z+1;a<=t;a++) update(x,y,1);
k=1;a=z;
update(x,y,1);
}
else
{
x=in();y=in();sum=0;
if (x>y) swap(x,y);
for (a=1;a<=t;a++)
{
ans=0;
query(x,y,1);
if (ans) sum++;
}
out(sum);putchar('\n');
}
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...