码迷,mamicode.com
首页 > 其他好文 > 详细

hihoCoder挑战赛1 毁灭者问题

时间:2019-08-26 00:57:56      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:blank   时间间隔   线段   查询   数据   时长   不同的   hoc   targe   

题目链接:http://hihocoder.com/problemset/problem/1034

数据结构题,由于每个魔法单位有着不同的回复速度和上限,所以不能根据吸收时间点进行查询和更新。但是如果知道每个人在哪些时间点被吸收了,那么可以按照每个单位的情况更新,具体操作是:时间间隔超过Mi/Ri的则被吸收的值为Mi(设这样的间隔有x个),否则为Ri*时间间隔(设这样的间隔总时间长度为y),此魔法单位被吸收的总量为x*Mi+y*Ri。

如何快速求每个单位在哪些时间被吸收:维护一个有序序列记录时间点,假设当前单位为i,在某个时间t1有一个以i-1为结束的吸收区间,那么在有序序列中删除t1,在某个时间t2有一个以i为开始的吸收区间,那么在有序序列中插入t2。做完以上的处理,有序序列中记录的时间点即为所求。这个序列用set就能维护。

如何快速求上面提到的间隔数x和间隔总时长y:维护一个线段树,线段树的每个节点代表一个时间间隔,间隔按升序排列,线段树维护两个区间和,一个是个数和一个是时长和。时间点序列中的插入操作相当于加入了两个

hihoCoder挑战赛1 毁灭者问题

标签:blank   时间间隔   线段   查询   数据   时长   不同的   hoc   targe   

原文地址:https://www.cnblogs.com/mcflurry/p/5091131.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!