救救
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<set>
#include<cstdio>
#include<ctime>
#include<stack>
#define int long long
#define lp p<<1
#define rp p<<1|1
#define mid (l+r)>>1
#define M 400010
using namespace std;
int l,t,o;
char x,y,op;
int sum[31][M],tag[31][M];
int re()
{
int x=0,p=1;
char y=getchar();
for(;y>'9'||y<'0';y=getchar())
if(y=='-')
p=-p;
for(;y>='0'&&y<='9';y=getchar())
x=x*10+y-'0';
return x*p;
}
void wr(int x)
{
if(x<0)
x=-x,putchar('-');
if(x>9)
wr(x/10);
putchar(x%10+'0');
}
void Push_up(int i,int p)
{
sum[i][p]=sum[i][lp]+sum[i][rp];
}
void Push_down(int i,int p)
{
if(tag[i][p]==-1)
{
sum[i][lp]=sum[i][rp]=0;
tag[i][lp]=tag[i][rp]=-1;
}
else
{
sum[i][rp]=sum[i][lp]=tag[i][p];
tag[i][lp]=tag[i][rp]=tag[i][p];
}
tag[i][p]=0;
}
void Build(int i,int l,int r,int p)
{
if(l==r)
{
sum[i][p]=1;
return;
}
Build(i,l,mid,lp);
Build(i,mid+1,r,rp);
Push_up(i,p);
}
void Change(int i,int cl,int cr,int l,int r,int p,int k)
{
if(cl<=l&&cr>=r)
{
sum[i][p]=k;
if(!k)
tag[i][p]=-1;
else
tag[i][p]=k;
return;
}
if(tag[i][p])
Push_down(i,p);
if(cl<=mid)
Change(i,cl,cr,l,mid,lp,k);
if(cr>mid)
Change(i,cl,cr,mid+1,r,rp,k);
Push_up(i,p);
}
int Query(int i,int ql,int qr,int l,int r,int p)
{
if(ql<=l&&qr>=r)
return sum[i][p];
if(tag[i][p])
Push_down(i,p);
return Query(i,ql,qr,l,mid,lp)+Query(i,ql,qr,mid+1,r,rp);
}
signed main()
{
l=re(),t=re(),o=re();
Build(1,1,l,1);
while(o--)
{
cin>>op;
x=re(),y=re();
if(x>y)
swap(x,y);
if(op=='C')
{
int z;
z=re();
for(int i=1;i<=t;i++)
{
if(z!=i)
Change(i,x,y,1,l,1,0);
else
Change(i,x,y,1,l,1,1);
}
}
else
{
int ans=0;
for(int i=1;i<=t;i++)
{
if(Query(i,x,y,1,l,1))
ans++;
}
wr(ans),putchar('\n');
}
}
return 0;
}