[置顶] 莫队算法(最小曼哈顿生成树或者分块处理)

莫队算法是一种离线处理区间问题很强的算法,简单学了下。

例题:http://blog.csdn.net/bossup/article/details/39236275

这题没有地方提交,解答在犇犇博客里很清楚,反正就是分块,然后按照L所在块号,和右端点排序,离线搞

贴个kuangbin菊苣的代码当莫队的模版把:http://paste.ubuntu.net/15023607/


还有就是最小曼哈顿生成树:http://blog.csdn.net/huzecong/article/details/8576908

这个就是把平面分成8块,然后在45度里求解,然后翻转3次,就能求出,给个模版把:http://paste.ubuntu.net/15023609/

我们只需考虑在一块区域内的点,其他区域内的点可以通过坐标变换“移动”到这个区域内。为了方便处理,我们考虑在y轴向右45度的区域。在某个点A(x0,y0)的这个区域内的点B(x1,y1)满足x1≥x0且y1-x1>y0-x0。这里对于边界我们只取一边,但是操作中两边都取也无所谓。那么|AB|=y1-y0+x1-x0=(x1+y1)-(x0+y0)。在A的区域内距离A最近的点也即满足条件的点中x+y最小的点。因此我们可以将所有点按x坐标排序,再按y-x离散,用线段树或者树状数组维护大于当前点的y-x的最小的x+y对应的点。时间复杂度O(NlogN)。



你可能感兴趣的:(ACM)