您的位置:首页 > 其它

【八校联考2013】百团大战

2015-08-03 20:06 141 查看

题目大意

在数轴上,每一秒可以移动vv个单位,有nn个得分点,在tit_i时刻移动到xix_i可以得到一分。问:若时刻00在00这个位置则最多可以得多少分?若时刻00在任意位置最多可以得多少分?

1<=n<=100000,|xi|<=200,000,000,1<=Ti<=1,000,0001<=n<=100000, |x_i|<=200,000,000, 1<=Ti<=1,000,000

我的分析

这道题在做的时候我用的是O(nlog2n)O( nlog^2n)的树状数组套动态开点的线段树。然而这种做法线段树是可以略去的= =,主要是式子里的一些性质没有找出来。

我的方法思路主要如下。首先先把ti=0和xi=0t_i=0和x_i=0这个的得分点加入所有点中,然后倒着做,设i,ji, j是两个不同的得分点且ti>tjt_i>t_j,若从ii可以到jj,则有

|xi−xj|<=(ti−tj)v|x_i-x_j|<=(t_i-t_j)v

因为是绝对值小于某个数,那么不妨忽略掉负的,则有

xi−tiv<=xj−tjvx_i-t_iv<=x_j-t_jv



−xi−tiv<=−xj−tjv-x_i-t_iv<=-x_j-t_jv

两者同时成立。

如果将xi−tivx_i-t_iv和−xi−tiv-x_i-t_iv分别作为xx坐标和yy坐标来将这些点投影到二维平面上,那么如果两个点可以转移那么两个点与原点构成的矩形必定是包含关系,只需要按xx坐标排序,yy坐标用树状数组维护,再用以tit_i为关键字的线段树来维护最大值就可以做出来了。

但是考虑左边是绝对值,如果上面的式子成立的话那么右边必定为正,那么就是说不需要判断tit_i的关系了。那么就是按xx坐标排序然后用树状数组维护yy坐标进行转移就可以了。

另一种思路

另外还有一个方法,首先把tit_i全部乘vv,也就是把一秒走vv步变成vv秒走vv步,那么可以转移的部分形成了一个等腰直角三角形,将坐标系旋转π4\frac{\pi}{4},用扫描线来维护转移就可以了。

一些奇怪的东西

题目要求输出两个数在一行,然而我输出到了两行导致比赛时这道题爆零了。对拍了个半年,昨天是对拍写错了,今天是格式不对。简直了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: