MLE求助
  • 板块P1558 色板游戏
  • 楼主red_L
  • 当前回复3
  • 已保存回复3
  • 发布时间2023/3/5 11:06
  • 上次更新2023/10/23 23:00:39
查看原帖
MLE求助
366840
red_L楼主2023/3/5 11:06

rt,怎么会MLE啊:

#include <iostream>
using namespace std;

const int N=100010;
struct Node
{
	int l,r,lazy,col;
}tr[N*3];
void pushup(int u)
{
	tr[u].col=tr[u<<1].col|tr[u<<1|1].col;
}
void pushdown(int u)
{
	if(tr[u].lazy)
	{
		tr[u<<1].lazy=tr[u].lazy;
		tr[u<<1].col=1<<tr[u<<1].lazy;
		tr[u<<1|1].lazy=tr[u].lazy;
		tr[u<<1|1].col=1<<tr[u<<1|1].lazy;
		tr[u].lazy=0;
	}
}
void build(int u,int l,int r)
{
	if(l==r) tr[u]={l,r,0,0};
	else
	{
		tr[u]={l,r,0,0};
		int mid=l+r>>1;
		if(l<=mid) build(u<<1,l,mid);
		if(r>mid) build(u<<1|1,mid+1,r);
		pushup(u);	
	}
}
void modify(int u,int l,int r,int x)
{
	if(l<=tr[u].l&&tr[u].r<=r)
	{
		tr[u].col=1<<x;
		tr[u].lazy=x;
	}
	else
	{
		pushdown(u);
		int mid=tr[u].l+tr[u].r>>1;
		if(l<=mid) modify(u<<1,l,r,x);
		if(r>mid) modify(u<<1|1,l,r,x);
		pushup(u);
	}
}
int query(int u,int l,int r)
{
	if(l<=tr[u].l&&tr[u].r<=r) return tr[u].col;
	else
	{
		pushdown(u);
		int mid=tr[u].l+tr[u].r>>1;
		int res=0;
		if(l<=mid) res|=query(u>>1,l,r);
		if(r>mid) res|=query(u>>1|1,l,r);
		return res;
	}
}
int main()
{
	int l,t,o,a,b,c;
	char ch;
	cin>>l>>t>>o;
	build(1,1,l);
	modify(1,1,l,1);
	while(o--)
	{
		cin>>ch;
		if(ch=='C')
		{
			cin>>a>>b>>c;
			if(a>b) swap(a,b);
			modify(1,a,b,c);
		}
		else
		{
			cin>>a>>b;
			if(a>b) swap(a,b);
			int ans=0;
			int x=query(1,a,b);
			for(int i=1;i<=t;i++)
			{
				if(x&(1<<i)) ans++;
			}
			cout<<ans<<endl;
		}
	}
	return 0;
}
2023/3/5 11:06
加载中...