#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=100005;
int n,k,m;
struct seg{
int sum[N<<2],tag[N<<2];
seg(){memset(tag,-1,sizeof(tag));}
void pushup(int k){sum[k]=sum[k<<1]+sum[k<<1|1];}
void lazy(int k,int l,int r,int v){
tag[k]=v;
sum[k]=v*(r-l+1);
}
void pushdown(int k,int l,int r,int mid){
if(tag[k]==-1)return;
lazy(k<<1,l,mid,tag[k]);
lazy(k<<1|1,mid+1,r,tag[k]);
tag[k]=-1;
}
void modify(int k,int l,int r,int x,int y,int v){
if(x<=l&&r<=y){
lazy(k,l,r,v);
return;
}
int mid=l+r>>1;
pushdown(k,l,r,mid);
if(x<=mid)modify(k<<1,l,mid,x,y,v);
if(mid<y)modify(k<<1|1,mid+1,r,x,y,v);
pushup(k);
}
int query(int k,int l,int r,int x,int y){
if(x<=l&&r<=y)return sum[k];
int mid=l+r>>1,ret=0;
pushdown(k,l,r,mid);
if(x<=mid)ret+=query(k<<1,l,mid,x,y);
if(mid<y)ret+=query(k<<1|1,mid+1,r,x,y);
return ret;
}
}s[31];
char op[2];
int main(){
scanf("%d%d%d",&n,&k,&m);
s[1].modify(1,1,n,1,n,1);
for(int a,b,c;m--;){
scanf("%s%d%d",op,&a,&b);
if(a>b)swap(a,b);
if(op[0]=='C'){
scanf("%d",&c);
for(int i=1;i<=k;i++)s[i].modify(1,1,n,a,b,i==c);
}else{
int ans=0;
for(int i=1;i<=k;i++)ans+=(s[i].query(1,1,n,a,b)>0);
printf("%d\n",ans);
}
}
return 0;
}
当然如果可以解决这个贴的问题就更好