1 #include<iostream> 2 #include<cstdio> 3 #include<vector> 4 #include<cstring> 5 #define ls (x<<1) 6 #define rs (x<<1|1) 7 using namespace std; 8 const int N=1e5+5; 9 int sum[N<<2],tag[N<<2]; 10 int n,m,t; 11 void update(int x){sum[x]=sum[ls]|sum[rs];} 12 void down(int l,int r,int x) 13 { 14 if(tag[x]) 15 { 16 tag[ls]=tag[rs]=tag[x]; 17 sum[ls]=1<<tag[x]; 18 sum[rs]=1<<tag[x]; 19 tag[x]=0; 20 } 21 } 22 void build(int l,int r,int x) 23 { 24 if(l==r) 25 { 26 sum[x]=2; 27 return; 28 } 29 int mid=(l+r)>>1; 30 build(l,mid,ls); 31 build(mid+1,r,rs); 32 update(x); 33 } 34 void modify(int A,int B,int l,int r,int v,int x) 35 { 36 if(A<=l&&B>=r) 37 { 38 tag[x]=v; 39 sum[x]=1<<v; 40 return; 41 } 42 down(l,r,x); 43 int mid=(l+r)>>1; 44 if(A<=mid)modify(A,B,l,mid,v,ls); 45 if(B>mid)modify(A,B,mid+1,r,v,rs); 46 update(x); 47 } 48 int query(int A,int B,int l,int r,int x) 49 { 50 if(A<=l&&B>=r)return sum[x]; 51 down(l,r,x); 52 int mid=(l+r)>>1,ans=0; 53 if(A<=mid)ans|=query(A,B,l,mid,ls); 54 if(B>mid)ans|=query(A,B,mid+1,r,rs); 55 return ans; 56 } 57 58 int main() 59 { 60 scanf("%d%d%d",&n,&t,&m); 61 build(1,n,1); 62 char op[2]; 63 for(int i=1;i<=m;i++) 64 { 65 66 scanf("%s",op); 67 if(op[0]=='C') 68 { 69 int l,r,v; 70 scanf("%d%d%d",&l,&r,&v); 71 if(l>r)swap(l,r); 72 modify(l,r,1,n,v,1); 73 } 74 else 75 { 76 int l,r; 77 scanf("%d%d",&l,&r); 78 if(l>r)swap(l,r); 79 int ans=query(l,r,1,n,1),cnt=0; 80 for(int i=31;i>=0;i--)if(ans>>i&1)cnt++; 81 printf("%d\n",cnt); 82 } 83 } 84 return 0; 85 }