help help RE求调
  • 板块P1558 色板游戏
  • 楼主u_lcp
  • 当前回复0
  • 已保存回复1
  • 发布时间2024/3/27 21:28
  • 上次更新2024/3/28 09:36:04
查看原帖
help help RE求调
622631
u_lcp楼主2024/3/27 21:28
#include<bits/stdc++.h>
using namespace std;
int read()
{
	int f=1,k=0;char c=getchar();
	while('0'>c||'9'<c){if(c=='-'){f=-1;}c=getchar();}
	while(c>='0'&&c<='9'){k=(k<<3)+(k<<1)+(c^48);c=getchar();}
	return f*k;
}
void write(int x)
{
	if(x==0){putchar('0');return;}
	if(x<0)putchar('-'),x=-x;
	if(x>9)write(x/10);
	putchar(x%10+'0');
}
#define ls rt<<1
#define rs rt<<1|1
const int maxn=100010;
struct sgt
{
	int tag,kind;
}t[4*maxn];
int len,ttt,o;
void pushup(int rt)
{
	t[rt].kind=t[ls].kind|t[rs].kind;
}
void build(int rt,int l,int r)
{
	t[rt].tag=0;
	if(l==r)
	{
		t[rt].kind=1;
		return;
	}
	int mid=(l+r)>>1;
	build(ls,l,mid);
	build(rs,mid+1,r);
	pushup(rt);
}
void pushdown(int rt)
{
	if(t[rt].tag)
	{
		t[ls].tag=t[rt].tag;
		t[ls].kind=t[rt].tag;
		t[rs].tag=t[rt].tag;
		t[rs].kind=t[rt].tag;
		t[rt].tag=0;
	}
}
void update(int rt,int l,int r,int ql,int qr,int x)
{
	if(ql<=l&&r<=qr)
	{
		t[rt].tag=1<<(x-1);
		t[rt].kind=1<<(x-1);
		return;
	}
	pushdown(rt);
	int mid=(l+r)>>1;
	if(ql<=mid)update(ls,l    ,mid,ql,qr,x);
	if(qr>mid) update(rs,mid+1,r  ,ql,qr,x);
	pushup(rt);
}
int query(int rt,int l,int r,int ql,int qr)
{
	if(ql<=l&&r<=qr)
	{
		return t[rt].kind;
	}
	pushdown(rt);
	int mid=(l+r)>>1;
	if(qr<=mid)return query(ls,l,mid,ql,qr);
	else if(ql>mid)return query(rs,mid+1,r,ql,qr);
	else return query(ls,l,mid,ql,qr)|query(rs,mid+1,r,ql,qr);
}
int main()
{
//	freopen("P1558_1.in","r",stdin);
//	freopen("111.out","w",stdout);
	len=read();ttt=read();o=read();
	build(1,1,len);
	while(o--)
	{
		char tmp[2];
		scanf("%s",tmp);
		if(tmp[0]=='C')
		{
			int a,b,c;
			a=read(),b=read(),c=read();
			update(1,1,len,a,b,c);
		}
		else
		{
			int a=read(),b=read();
			int x=query(1,1,len,a,b);
			int cnt=0;
			while(x)
			{
				if(x&1)
				{
					cnt++;
				}
				x=x>>1;
			}
			write(cnt);
			putchar('\n');
		}
	}
	return 0;
}
2024/3/27 21:28
加载中...