数据太水了,暴力 + 卡常就能切。
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<vector>
#define M 111111
using namespace std;
int l,t,o,x[M]={};bool y[M];
int re()
{
int x=0,z=1;
char y=getchar();
while(y>'9'||y<'0')
{ if(y=='-')z=-1;
y=getchar();
}
while(y>='0'&&y<='9')x=x*10+y-'0',y=getchar();
return x*z;
}
int main()
{
l=re();t=re();o=re();
for(int j=0;j<=l;j++)
{
x[j]=1;
}
for(register int i=1;i<=o;i++)
{
int a,b,c;char n;int ans=0;
cin>>n;
a=re();b=re();
if(a>b)swap(a,b);
memset(y,0,sizeof(y));
if(n=='C')
{
c=re();
for(register int j=a;j<=b;j++)
{
x[j]=c;
//y[c]++;
}
}
if(n=='P')
{
if(a==b)
{
cout<<1<<endl;
continue;
}
int l=0;
for(register int j=a;j<=b;j++)
{
if(!y[x[j]])
{
y[x[j]]=1;
ans++;
}
}
cout<<ans<<endl;
}
}
return 0;
}
最后一个点只用了 700ms 。