博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 4031 Attack 树状数组
阅读量:4567 次
发布时间:2019-06-08

本文共 1980 字,大约阅读时间需要 6 分钟。

题意:美国有种防护盾,能抵挡恐怖分子的秘密武器,但每次抵挡后,需要t个单位时间去冷却,期间不能起抵挡作用。

思路:我一开始用线段树做,但做到一半就坑爹了~~当修改了线段树的子节点信息时,父节点的左右节点就会产生不一致性,那么也就没法直接修改父节点。

其实这题线段树和树状数组都能做。我们现在把问题分为两个部分:

1.统计但会节点被攻击的次数;

2.统计所有攻击中多少次无效;

那么总的攻击次数减去无效的就是被攻击的次数了。

关于统计被攻击的次数用线段树和树状数组都很好实现。多少次无效的,我们可以定义一个Atc[i][2]数组,记录第i次攻击的区间左右节点。用数组uint[i][0]表示i次攻击后,上次受攻击的时间。uinti[i][1]表示i次攻击后,多少次无效。

每当遇到一次无效攻击,uint[i][0]就加上t(冷却时间),当再次被包括在攻击区间是也一定是无效攻击(已经冷却了).

具体见代码:

#include
using namespace std;int list[20005],c[20005];int n,m;void update(int i,int val){ while(i<=n) { c[i]+=val; i+=i&(-i); }}int Sum(int i){ int s=0; while(i) { s+=c[i]; i-=i&(-i); } return s;}int main(){ int t,i,j,x,y,k=0,tt=0,T,q; int Atc[20005][2]; int uint[20005][2]; char str[10]; scanf("%d",&T); while(T--) { scanf("%d%d%d",&n,&q,&t); memset(Atc,0,sizeof(Atc)); memset(uint,0,sizeof(uint)); memset(c,0,sizeof(c));//树状树状清零 for(i=1;i<=n;i++) uint[i][0]=1;//每个单位的初始受攻击时间为1 tt=0; printf("Case %d:\n",++k); for(i=1;i<=q;i++) { scanf("%s",&str); if(str[0]=='A') { tt++; scanf("%d%d",&x,&y); update(x,1);//记录x,y所在区间共被攻击多少次。 update(y+1,-1); Atc[tt][0]=x;//记录攻击区间信息。 Atc[tt][1]=y; } else { scanf("%d",&x); for(j=uint[x][0];j<=tt;) { if(Atc[j][0]<=x&&Atc[j][1]>=x)//如果在区间内,统计一次无效攻击,时间加t,准备统计下次无效攻击 { j+=t; uint[x][0]=j; uint[x][1]++; } else j++; } printf("%d\n",Sum(x)-uint[x][1]);//得出有效攻击次数 } } } return 0;}
View Code

 

转载于:https://www.cnblogs.com/wangfang20/archive/2013/05/23/3095039.html

你可能感兴趣的文章
线程初步了解 - <第一篇>
查看>>
NET(C#):使用HttpWebRequest头中的Range下载文件片段
查看>>
scrollTop()--返回或设置匹配元素的滚动条的垂直位置
查看>>
JavaScript学习 - 基础(八) - DOM 节点 添加/删除/修改/属性值操作
查看>>
解决SharePoint2010文档库中新建文档不是保存到文档库而是保存到本地电脑的问题...
查看>>
hadoop3.0新特性及新功能
查看>>
数据库面试常问的一些基本概念
查看>>
Intent中的四个重要属性——Action、Data、Category、Extras
查看>>
Android 自定义 ViewPager 打造千变万化的图片切换效果
查看>>
泛型集合的运用--DataSet转换为泛型集合
查看>>
IsBackground的理解
查看>>
Java中的Scoket编程
查看>>
WPF邮件群发工具开发 之 进度条(属性改变通知机制)的实现
查看>>
ubuntu14.04 放开串口权限
查看>>
HttpClient封装工具类
查看>>
机器学习 回归算法
查看>>
SSM博客登录注册
查看>>
在Linux系统上部署发布java web系统(Ubuntu16.04)
查看>>
shell 学习之脚本编写1
查看>>
winForm 程序开发界面参数传递
查看>>