学习
moros_nurd
菜鸡
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
单调栈
单调栈前置技能点:栈单调队列闲话:其实并不知道单调队列和单调栈的先后顺序,但既然我是先写单调队列的,那就把单调队列作为单调栈的前置技能点吧。问题:给定序列长度nn,求每个点作为最大/最小值的最长区间。思路:对于每个点,可以直接向左向右枚举直到遇到比它小的数,复杂度为O(n2)O(n^2)对于每个点,可以二分以它作为左端点的区间的长度,然后用线段树得到它是不是该长度的区间的最小值,同理向右处理。原创 2016-08-15 15:58:56 · 473 阅读 · 0 评论 -
斜率优化
斜率优化前置技能点:DP初步单调队列求凸包闲话:前面写这么多都是为了写这个做准备的……本来还应该写一下凸包,但凸包算法比较多,迟点吧……问题:给定非负整数序列aa长度为nn,状态转移方程为DP[i]=minik=1(DP[k]+(sum[i]−sum[k])2+C)DP[i]=\min_{k=1}^{i}(DP[k]+(sum[i]-sum[k])^2+C),求DP[n]思路:最朴素的做法,原创 2016-08-17 21:33:15 · 428 阅读 · 0 评论 -
单调队列
单调队列单调队列前置技能点问题思路概念引入复杂度拓展例题前置技能点:队列问题:对于一个长度为n的序列,我们希望知道所有以k为长度的子序列的区间最小/大值。思路:struct Node{ int id; int value;}input[NodeNum];可以以O(k)O(k)的复杂度暴力枚举得到[l,l+k)[l,l+k)的最值,由于inputinput中长度为kk的原创 2016-08-14 20:36:09 · 467 阅读 · 0 评论
分享