hdu4031(树状数组)
http://acm.hdu.edu.cn/showproblem.php?pid=4031
思路:将防御和攻击分开,用树状数组统计攻击次数,再开一个数组统计成功防御次数。
#include<iostream>
using namespace std;
struct
{
int num,count;
}d[20005];
int c[20005],n,str[20005][2];
int lowbit(int x)
{
return x&(-x);
}
void updatac(int i,int j)
{
while(i<=n)
{
c[i]+=j;
i+=lowbit(i);
}
}
int getsumc(int x)
{
int sum=0;
while(x>0)
{
sum+=c[x];
x-=lowbit(x);
}
return sum;
}
int main()
{
int t,f=0;
scanf("%d",&t);
while(t--)
{
memset(c,0,sizeof(c));
int i=0;
for(i=0;i<20005;i++)
{
d[i].num=0;
d[i].count=1;
}
int m,t;
scanf("%d%d%d",&n,&m,&t);
char s[5];
i=0;
printf("Case %d:\n",++f);
while(m--)
{
scanf("%s",s);
if(s[0]=='A')
{
i++;
int tmp1,tmp2;
scanf("%d%d",&tmp1,&tmp2);
str[i][0]=tmp1;
str[i][1]=tmp2;
updatac(tmp1,1);
updatac(tmp2+1,-1);
}
else
{
int tmp;
scanf("%d",&tmp);
for(int j=d[tmp].count;j<=i;)
{
if(tmp<=str[j][1]&&tmp>=str[j][0])
{
j=j+t;
d[tmp].count=j;
d[tmp].num++;
}
else
{
j++;
d[tmp].count=j;
}
}
printf("%d\n",getsumc(tmp)-d[tmp].num);
}
}
}
return 0;
}
朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。

浙公网安备 33010602011771号