Problem Description
Today is the 10th Annual of “September 11 attacks”, the Al Qaeda is about to attack American again. However, American is protected by a high wall this time, which can be treating as a segment with length N. Al Qaeda has a super weapon, every second it can attack
a continuous range of the wall. American deployed N energy shield. Each one defends one unit length of the wall. However, after the shield defends one attack, it needs t seconds to cool down. If the shield defends an attack at kth second, it can’t defend any
attack between (k+1)th second and (k+t-1)th second, inclusive. The shield will defend automatically when it is under attack if it is ready.



During the war, it is very important to understand the situation of both self and the enemy. So the commanders of American want to know how much time some part of the wall is successfully attacked. Successfully attacked means that the attack is not defended
by the shield.
 
Input
The beginning of the data is an integer T (T ≤ 20), the number of test case.

The first line of each test case is three integers, N, Q, t, the length of the wall, the number of attacks and queries, and the time each shield needs to cool down.

The next Q lines each describe one attack or one query. It may be one of the following formats

1. Attack si ti

  Al Qaeda attack the wall from si to ti, inclusive. 1 ≤ si ≤ ti ≤ N

2. Query p

  How many times the pth unit have been successfully attacked. 1 ≤ p ≤ N

The kth attack happened at the kth second. Queries don’t take time.

1 ≤ N, Q ≤ 20000

1 ≤ t ≤ 50
 
Output
For the ith case, output one line “Case i: ” at first. Then for each query, output one line containing one integer, the number of time the pth unit was successfully attacked when asked.
 
Sample Input
2
3 7 2
Attack 1 2
Query 2
Attack 2 3
Query 2
Attack 1 3
Query 1
Query 3
9 7 3
Attack 5 5
Attack 4 6
Attack 3 7
Attack 2 8
Attack 1 9
Query 5
Query 3
 
Sample Output
Case 1:
0
1
0
1
Case 2:
3
2
 
Source
 

思路:成功攻击的次数=总次数-被防御的次数。

用树状数组维护总次数,一个辅助数组记录当前点被攻击之后恢复的时间,还有一个数组记录当前点的被防御次数。


#include <stdio.h>

int n,node[20005],ls[20005],rs[20005],pos[20005],c[20005];

int lowbit(int x)
{
return x & -x;
} int sum(int x)
{
int res=0; while(x>0)
{
res+=node[x]; x-=lowbit(x);
} return res;
} void add(int x,int val)
{
while(x<=n)
{
node[x]+=val; x+=lowbit(x);
}
} int main()
{
int T,q,t,i,a,b,cnt,cases=1;
char s[10]; scanf("%d",&T); while(T--)
{
scanf("%d%d%d",&n,&q,&t); cnt=0; for(i=0;i<=n;i++) c[i]=node[i]=pos[i]=0; printf("Case %d:\n",cases++); while(q--)
{
scanf("%s",s); if(s[0]=='A')
{
scanf("%d%d",&a,&b); ls[cnt]=a;
rs[cnt]=b; cnt++; add(a,1);
add(b+1,-1);
}
else
{
scanf("%d",&a); for(i=pos[a];i<cnt;i++)
{
if(a>=ls[i] && a<=rs[i] && i>=pos[a])
{
pos[a]=i+t;
c[a]++; i+=t-1;
}
} printf("%d\n",sum(a)-c[a]);
}
}
}
}

最新文章

  1. 原生js封装ajax:传json,str,excel文件上传表单提交
  2. Set up Github Pages with Hexo, migrating from Jekyll
  3. RGui的http代理设置
  4. JAVA使用apache http组件发送POST请求
  5. MySQL数据库中,使用游标循环遍历
  6. [React] React Router: hashHistory vs browserHistory
  7. 连载:面向对象葵花宝典:思想、技巧与实践(33) - ISP原则
  8. hdu4738(双连通分量)
  9. ubuntu 下安装Angular2-cli脚手架
  10. md
  11. JS的常用属性
  12. c/c++ linux 进程 fork wait函数
  13. 误操作yum导致error: rpmdb
  14. Django model进阶
  15. [HZNOI #koishi] Magic
  16. 【转】默认网关有什么用?我应当怎么填写默认网关和DNS呢
  17. ZOJ3623:Battle Ships(全然背包)
  18. 使用Docx4j创建word文档
  19. [原创]Python/Django使用富文本编辑器XHeditor上传本地图片
  20. English trip -- Review Unit 9 Daily living 日常生活

热门文章

  1. 【GitHub】README.md文件中 markdown语法 插入超链接
  2. 为何Redis要比Memcached好用
  3. django 用model来简化form
  4. 简谈WP,IOS,Android智能手机OS
  5. iOS_新版iOS11 UITbleView适配的一些问题及解决方法
  6. Cent OS安装My Sql
  7. Install RabbitMQ server in CentOS 7
  8. php url路由伪静态
  9. C#实现发送手机短信
  10. Android下 调用原生相机拍照摄像