WA求调
查看原帖
WA求调
496117
wyh0721楼主2024/7/12 20:44
#include <bits/stdc++.h>
using namespace std;
int n,m,u,a[100005],co[33],mak;
struct node{
	int l,r,s;
}t[400005];
void lazy(int k,int v)
{
	t[k].s=v;
}
void putdown(int k)
{
	lazy(k*2,t[k].s);
	lazy(k*2+1,t[k].s);
	t[k].s=0;
}
void build(int k,int le,int ri)
{
	//mak=max(mak,k);
	t[k].l=le;
	t[k].r=ri;
	t[k].s=0;
	if(le==ri)
		return;
	int mid=(le+ri)/2;
	build(k*2,le,mid);
	build(k*2+1,mid+1,ri);
}
void change(int k,int le,int ri,int v)
{
	if(t[k].l>=le && t[k].r<=ri)
		return lazy(k,v);
	if(t[k].s!=0)
		putdown(k);
	int mid=(t[k].l+t[k].r)/2;
	if(le<=mid)
		change(k*2,le,ri,v);
	if(ri>mid)
		change(k*2+1,le,ri,v);
	if(t[k*2].s==t[k*2+1].s)
	{
		t[k].s=t[k*2].s;
		t[k*2].s=0;
		t[k*2+1].s=0;
	}
}
void qu(int k,int le,int ri)
{
	if(t[k].l>=le && t[k].r<=ri)
	{
		if(t[k].s!=0)
			co[t[k].s]=1;
		else
		{
			int mid=(t[k].l+t[k].r)/2;
			if(le<=mid)
			{
				if(k*2<=mak)
					qu(k*2,le,ri);
				else
					co[t[k].s]=1;
			}
			if(ri>mid)
			{
				if(k*2+1<=mak)
					qu(k*2+1,le,ri);
				else
					co[t[k].s]=1;
			}
		}
		return;
	}
	if(t[k].s!=0)
		putdown(k);
	int mid=(t[k].l+t[k].r)/2;
	if(le<=mid)
		qu(k*2,le,ri);
	if(ri>mid)
		qu(k*2+1,le,ri);
}
int main()
{
	cin>>n>>m>>u;
	build(1,1,n);
	//for(int i=1;i<=mak;i++)
	//	cout<<i<<' '<<t[i].l<<' '<<t[i].r<<' '<<t[i].s<<' '<<t[i].la<<endl;
	t[1].s=1;
	for(int i=1;i<=u;i++)
	{
		char c;
		cin>>c;
		if(c=='C')
		{
			int w,y,z;
			if(w>y)
				swap(w,y);
			cin>>w>>y>>z;
			change(1,w,y,z);
			//for(int i=1;i<=mak;i++)
			//	cout<<i<<' '<<t[i].l<<' '<<t[i].r<<' '<<t[i].s<<' '<<t[i].la<<endl;
		}
		else
		{
			int y,z;
			cin>>y>>z;
			if(y>z)
				swap(y,z);
			memset(co,0,sizeof(co));
			qu(1,y,z);
			//for(int i=1;i<=mak;i++)
			//	cout<<i<<' '<<t[i].l<<' '<<t[i].r<<' '<<t[i].s<<' '<<t[i].la<<endl;
			int ans=0;
			for(int i=1;i<=m;i++)
				if(co[i]==1)
					ans++;
			cout<<ans<<endl;
			
		} 
	}
	return 0;
}

2024/7/12 20:44
加载中...