#include<iostream>
#include<string>
using namespace std;
struct att
{
int l,r;
}a[20011];
int c[20011];
int denf[20011];
int pos[20011];//墙的解冻时间点
int n;
int lowbit(int x){
return x & (-x);
}
void update(int i,int value){ //区间修改,1到i加上value
while(i>0){
c[i]+=value;
i-=lowbit(i);
}
}
int sum(int i)
{
int sums=0;
while(i<=n)
{
sums+=c[i];
i+=lowbit(i);
}
return sums;
}
main()
{
int w;
char str[8];
int q,t;
int qq;
int ca=1;
int cnt;
int i,j;
cin>>w;
while(w--)
{
cout<<"Case "<<ca++<<":\n";
cnt=0;
memset(pos,0,sizeof(pos));
memset(c,0,sizeof(c));
memset(denf,0,sizeof(denf));
scanf("%d%d%d",&n,&q,&t);
for(int k=1;k<=q;k++)
{
scanf("%s",str);
if(str[0]=='A')
{
scanf("%d%d",&i,&j);
update(j,1);
update(i-1,-1);//i到j加1,相当于1到j加1且1到i-1减去1
a[cnt].l=i;
a[cnt].r=j;
cnt++;
}
else
{
scanf("%d",&qq);
for(i=pos[qq];i<cnt;i++)//枚举第pos[qq]后的所有攻击(已解冻时)
{
if(qq>=a[i].l && qq<=a[i].r)//墙qq在这次攻击范围内
{
denf[qq]++;//挡住一次攻击
pos[qq]=i+t;//挡住这次后的解冻点
i=i+t-1;//结束这句后i++,故-1
}
}
printf("%d\n",sum(qq)-denf[qq]);
}
}
}
}
HDU 4031 Attack
最新推荐文章于 2016-08-10 16:29:00 发布