
数据结构
文章平均质量分 77
ww32cc
这个作者很懒,什么都没留下…
展开
-
单调队列及优化DP poj2823/poj1821/poj2373
用于求解某个元素所在的一定区间内的最优值。队列中存放元素索引,因为要根据区间来将无效的队头出队。应用一:求滑动窗口内的最大/小值题目链接: poj2823 Sliding Window 当区间长度固定时,对第i个元素,有效区间为[i - k + 1, i]。以最大值为例,维护一个单调下降的队列,存放当前的最大值、次大值…… 从左至右扫描数组,每次将a[i]与队尾j比较,原创 2015-08-07 17:39:42 · 550 阅读 · 0 评论 -
尺取法
尺取法一般用来求解最大/最小区间问题。用两个指针代表区间的首尾,反复地推进区间的开头和末尾,来求取满足条件的最小/大区间,复杂度为O(n)。 当一个区间满足条件时,左指针推进,判断新区建是否满足条件,如果不满足条件,那么区间末尾向后扩展,直到满足条件为止。这样在区间推移过程中我们就得到了很多满足条件的区间,根据题意取最优即可。 当满足以下条件时,可以使用尺取法:若从开始,原创 2015-08-10 14:52:07 · 609 阅读 · 0 评论 -
单调栈
从某一个元素开始,以该元素为最值,一直向前延伸找最优值(若需要两个方向的解,则再从右往左扫描一遍即可).每个元素最多进出栈一次,复杂度O(n)应用:①栈维护上升序列求解不小于i的最大区间: hdu1506 Largest Rectangle in a Histogram 求直方图能覆盖的最大矩阵的面积,则矩阵的高度为其中直方图中的最小高度。对某个直方图h[i],向两边搜寻不小于该高度的原创 2015-08-06 13:31:08 · 433 阅读 · 0 评论 -
树状数组及其应用
树状数组是一个查询和修改复杂度都为log(n)的数据结构。主要用于查询任意两位置之间的所有元素之和,每次可以修改某一处元素的值。以下是树状数组的存储方式(图片来源于互联网)可以看出:C[1]=A[1]C[2]=A[1]+A[2]C[3]=A[3]C[4]=A[1]+A[2]+A[3]+A[4]C[5]=A[5]C[6]=A[5]+A[6]C[7]=A原创 2015-09-21 09:57:38 · 472 阅读 · 0 评论 -
Codeforces Round #291 (Div. 2) D. R2D2 and Droid Army RMQ/单调队列/尺取法
题意:M种detail的序列,求这样的区间:区间内每种detail的最大值之和小于数值K,求区间的最大长度。解法一:二分+区间最大值(RMQ或单调队列)由于是求最大长度,而给定一个长度我们可去check是否为合法解,所以可以使用二分。①区间最大值RMQ问题可以使用线段树、ST算法(sparse table)降低查询复杂度。线段树和ST算法预处理需要O(nlogn),线段树查询需要O(l原创 2015-08-10 15:53:50 · 641 阅读 · 0 评论 -
最近公共祖先(LCA)——离线Tarjan算法+并查集优化
LCA问题(lowest common ancestors):在一个有根树T中,两个节点和的原创 2016-04-12 22:23:44 · 2840 阅读 · 0 评论