1 /*
2 http://acm.hdu.edu.cn/showproblem.php?pid=4031
3 */
4 #include<iostream>
5 #include<cstdio>
6 #include<cstring>
7 #include<algorithm>
8 using namespace std;
9 const int maxn=100005;
10 int tree[maxn],n,attack[maxn][2],start[maxn],sum[maxn];
11 char cmd[10];
12 int lowbit(int x)
13 {
14 return x&-x;
15 }
16 void update(int x,int d)//节点更新,x=x+d
17 {
18 for(int i=x;i>0;i-=lowbit(i))
19 tree[i]+=d;
20 }
21 int getsum(int x)//求到x的总和
22 {
23 int i,sum=0;
24 for(i=x;i<=n;i+=lowbit(i))
25 sum+=tree[i];
26 return sum;
27 }
28 int main()
29 {
30 int t,Case=0;
31 scanf("%d",&t);
32 while(t--)
33 {
34 int q,co;
35 scanf("%d %d %d",&n,&q,&co);
36 memset(tree,0,sizeof(tree));
37 memset(sum,0,sizeof(sum));
38 memset(start,0,sizeof(start));
39 int c=0;
40 printf("Case %d:\n",++Case);
41 while(q--)
42 {
43 int a,b;
44 scanf("%s %d",cmd,&a);
45 if(cmd[0]=='A')
46 {
47 scanf("%d",&b);
48 attack[c][0]=a;
49 attack[c][1]=b;
50 c++;//c代表攻击次数
51 update(b,1);
52 update(a-1,-1);//给被攻击的区间加1,代表一次攻击
53 }
54 else
55 {
56 for(int j=start[a];j<c;j++)//为避免多次访问同一点造成的时间浪费,用start数组记录成功防御后到下一次冷却完的时间
57 if(attack[j][0]<=a&&attack[j][1]>=a)
58 sum[a]++,start[a]=j+co,j+=co-1;//计算总防御数sum
59 printf("%d\n",getsum(a)-sum[a]);//被攻击数=总攻击数-总防御数
60 }
61 }
62 }
63 return 0;
64 }