动态规划 O(NlogN)结构 在插入排序时,我们倘若用二分查找的形式去寻找插入位置,看似很快,但是却要移动后面的位置,使得这个二分得不偿失 但,如果只是替换某个值呢? 在动态规划的很多题目里面,我们正是要维护这样的一个决策单调序列, 进行更新采取的方案正是替换 注意,这样处理并不能记录opt答案对 ...
分类:
其他好文 时间:
2020-07-02 10:47:23
阅读次数:
54
https://vjudge.net/contest/353156#problem/A 一开始想着按背包做 = = 我的dp还是太菜了 应该按照单调序列做 1 #include <iostream> 2 #include <algorithm> 3 #include <vector> 4 using ...
分类:
其他好文 时间:
2020-01-27 13:48:24
阅读次数:
59
一, 给定一个区间,求所有区间长度为L的区间的最大值和最小值 二, 该题有很多做法。 自然用的是滑动窗口(单调队列) 可能的做法: O(nlogn)的线段树 O(nlogn)的带删除优先队列(对顶堆) 还能再快一点吗? O(n)-O(1)RMQ代替线段树 三, 单调队列和单调栈的意思一样,始终要你维 ...
分类:
其他好文 时间:
2019-12-14 19:36:17
阅读次数:
140
最长不下降子序列实现: 利用序列的单调性。 对于任意一个单调序列,如 1 2 3 4 5(是单增的),若这时向序列尾部增添一个数 x,我们只会在意 x 和 5 的大小,若 x>5,增添成功,反之则失败。由于普通代码是从头开始比较,而 x 和 1,2,3,4 的大小比较是没有用处的,这种操作只会造成时 ...
分类:
其他好文 时间:
2019-09-29 19:37:50
阅读次数:
56
原题 题目链接 题目分析 题意很明确,就是要维护单调递增的序列,最后看有多少种单调序列即可,设定一个dp数组,cnt表示数组大小,初始化为0,然后把所有木头从小到大排个序,当遍历到木头i时,如果dp数组里有比木头i还小的,就代替它,否则就dp[cnt++]=木头i,最后cnt就是答案. 代码 ...
分类:
其他好文 时间:
2019-08-25 17:39:57
阅读次数:
73
二分与三分 二分查找 在一个单调序列中查找一个元素的算法。 一般偷懒做法: 函数直接实现。 具体实现:不断以从答案所在的区间中间划分出两个子区间,舍弃不存在答案的那一个子区间,在存在答案的那个区间继续二分。 二分答案 在所有问题的答案的集合中二分查找 最优解 的算法。 具体而言,就是先找出答案的范围 ...
分类:
其他好文 时间:
2019-07-29 00:05:28
阅读次数:
106
二分的基本用途是在单调序列或单调函数中做查找操作。 二分,顾名思义,是不断将待求解区间平均分成两份,根据求解区间中点的情况来确定目标元素所在区间,这样就把解的范围缩小了一半。 二分算法的复杂度:O(二分次数*单次判定复杂度) 二分的写法: 二分常见的题型: 1.二分答案:最大值最小,最小值最大的问题 ...
分类:
其他好文 时间:
2019-06-07 11:00:41
阅读次数:
78
这两个题是一样的,不过数据范围不同。 思路1: 在CF713C中,首先考虑使生成序列单调不下降的情况如何求解。因为单调上升的情况可以通过预处理将a[i]减去i转化成单调不下降的情况。 首先,生成的序列中的每个数一定是原序列中的数。于是可以通过dp+离散化技巧解决。dp[i][j]表示把前i个数变成单 ...
分类:
其他好文 时间:
2019-05-08 17:43:28
阅读次数:
141
要把一个序列变成一个不严格的单调序列,求最小费用 可以用滚动数组实现,空间省了许多 ...
分类:
其他好文 时间:
2019-01-03 14:57:41
阅读次数:
117
合集,三个题目基本上都一样。耗时也不贴了。 拦截导弹: 1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 const int N=128; 5 int n=1,val[N]; 6 int up[N],dn[N],cnt1 ...
分类:
其他好文 时间:
2017-07-21 21:50:37
阅读次数:
229