RT,已经变成题解的形状力!还是过不掉。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
#define rd(n) n=read()
#define ri register int
const int N=100005;
inline int read()
{
register int ans=0,f=0; register char ch=getchar();
while(ch<'0'||ch>'9'){f^=(ch=='-');ch=getchar();}
while(ch>='0'&&ch<='9'){ans=(ans<<3)+(ans<<1)+(ch^48);ch=getchar();}
return f?-ans:ans;
}
inline void print(int n)
{
if(n<0){putchar('-');n=-n;}
if(n>9) print(n/10);
putchar(n%10+'0');
}
int n,m,q,id,l,r,j,ans;
#define lson(p) p<<1
#define rson(p) p<<1|1
struct SegmentTree{
int l,r;
int sum,add;
#define l(i) t[i][0].l
#define r(i) t[i][0].r
#define sum(i,j) t[i][j].sum
#define add(i,j) t[i][j].add
}t[N<<2][31];
inline void pushup(int p,int k)
{
sum(p,k)=sum(lson(p),k)+sum(rson(p),k);
}
inline void build(int p,int l,int r,int k)
{
l(p)=l; r(p)=r;
if(l==r)
{
sum(p,k)=1;
return;
}
ri mid=(l+r)>>1;
build(lson(p),l,mid,k);
build(rson(p),mid+1,r,k);
pushup(p,k);
}
inline void spread(int p,int k)
{
if(add(p,k)=-1)
{
sum(lson(p),k)=0; sum(rson(p),k)=0;
add(lson(p),k)=-1; add(rson(p),k)=-1;
}
else
{
sum(lson(p),k)=sum(rson(p),k)=add(p,k);
add(lson(p),k)=add(rson(p),k)=add(p,k);
}
add(p,k)=0;
}
inline void change(int p,int l,int r,int k,int v)
{
if(l<=l(p)&&r>=r(p))
{
sum(p,v)=k;
if(!k) add(p,v)=-1;
else add(p,v)=k;
return;
}
if(add(p,v)) spread(p,v);
ri mid=(l(p)+r(p))>>1;
if(l<=mid) change(lson(p),l,r,k,v);
if(r>mid) change(rson(p),l,r,k,v);
pushup(p,v);
}
inline int query(int p,int l,int r,int k)
{
if(l<=l(p)&&r>=r(p)) return sum(p,k);
if(add(p,k)) spread(p,k);
ri mid=(l(p)+r(p))>>1; int ans=0;
if(l<=mid) ans+=query(lson(p),l,r,k);
if(r>mid) ans+=query(rson(p),l,r,k);
return ans;
}
char cc;
int k;
signed main(void)
{
rd(n); rd(q); rd(m);
build(1,1,n,1);
while(m--)
{
cin>>cc;
rd(l); rd(r);
if(l>r) swap(l,r);
if(cc=='C')
{
rd(k);
for(ri i=1;i<=q;++i)
{
if(i!=k) change(1,l,r,0,i);
else change(1,l,r,1,i);
}
}
else
{
int ans=0;
for(ri i=1;i<=q;++i)
{
if(query(1,l,r,i)) ++ans;
}
print(ans);
puts("");
}
}
return 0;
}