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

HDU 5372 Segment Game

时间:2015-08-12 01:05:43      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

我的内心是几乎崩溃的,感受到了英语渣的悲剧。。

前几次WA没有发现是第i次增加操作。> <

发现的时候已经要结束了,飞快的改完一看来不及了直接一交。。。愉快领到了CE,已得赛后秒过题综合症。

 

其实这题看起来像CDQ分治,但是我还不太会= =

但是我们可以用树状数组做。

 

先来个图

技术分享

当查询[x,y]这个区间的时候。蓝色的是需要统计的,绿色的是不需要统计的。橙色的 另外说。

可以用left[i]表示左端点在i的右边的(>=)的点的个数。

right[i]表示右端点在i的右边的点的个数。(>)

可以发现绿色的线段有个统一的特点:他们的左端点统计在left[x]中,右端点统计在right[y]中。

蓝色的线段只有出现在left[x]中。

这样,我们用left[x] - right[y]就能获得蓝色线条的个数了。

当时纠结了很久橙色线条也出现在了right[y]中,该怎么去掉。。。然后突然发现线段长度递增,因此不会出现前面的线段比后面的长的情况,也就不会出现前面有长度大于i的线条,也就是根本没有这个橙色线条存在。。

 

于是这道题就变水了。。。

直接用一个树状数组维护左端点在1-x中有多少个,另一个维护右端点在1-x有多少个

查询的时候加加减减就好了。。。

 

T T 居然没过T T居然还是因为看错题T T不想愉快玩耍了T T

 

好好学英语T T

重新培养一下变量定义的习惯T T

代码是队友的,就不贴啦> <

HDU 5372 Segment Game

标签:

原文地址:http://www.cnblogs.com/bbbbbq/p/4722634.html

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