随笔分类 -  基础算法 - 排序

摘要:题目大意:一个人在时间 [1,N] 内工作,现有 M 个任务,每个任务需要在一段固定的时间区间内完成,任务之间的时间可能有重叠。若当前时间有任务要开始,且人处于空闲状态,则一定要这个人来做,否则这个人忽略这个任务。求用以上原则进行工作的最长休息时间是多少。 题解: 若用 f[i] 表示前 i 分钟的 阅读全文
posted @ 2019-06-27 11:42 shellpicker 阅读(454) 评论(0) 推荐(0)
摘要:题目大意:给定一个长度为 N 的序列,序列中的数两两不相同,每次可以交换序列中任意两个数,代价为这两个数的和,问将序列调整为升序,最少的代价是多少。 题解:考虑这个问题的一个子问题,这个序列为 N 的一个排列的时候,代价是多少。首先,对于许多交换操作来说,并不是所有操作都是有意义的。可以发现,序列可 阅读全文
posted @ 2019-04-08 00:49 shellpicker 阅读(262) 评论(0) 推荐(0)
摘要:题目大意:给定一个长度为 n 的序列,给定一个恒定的 w,求解 $$\sum\limits_{i=1}^{n}min\{d[i],w\}$$ 题解:学会了对最小值和式的快速处理。 若在下标的角度考虑,显然每次询问都要 $O(n)$,复杂度爆炸。由于每次都是与一个常数比较,从值域角度考虑,等价于对小于 阅读全文
posted @ 2019-04-07 09:52 shellpicker 阅读(321) 评论(0) 推荐(0)
摘要:代码如下 cpp include using namespace std; const int maxn=1e5+10; int n,a[maxn],b[maxn],cnt[10],mx; void read_and_parse(){ scanf("%d",&n); for(int i=1;i=1; 阅读全文
posted @ 2019-01-02 21:00 shellpicker 阅读(125) 评论(0) 推荐(0)
摘要:题目大意:列出从一个给定上界的双平方数集合中选出若干个数,组成长度为 N 的等差数列的首项和公差。 题解:首先,因为是在双平方数集合上的等差数列,而且根据题目范围可知,上界不超过 2e5,可以先打表,将符合条件的双平方数存入一个数组,并排序离散化。 在等差数列中,只要数列中的前两项确定,整个数列就会 阅读全文
posted @ 2018-11-29 11:07 shellpicker 阅读(393) 评论(0) 推荐(0)
摘要:构造后缀数组$SA[\ ]$,即对一个字符串的每个后缀按照字典序排序后得到的数组,在这里采用哈希+二分的方式优化字符串的比较部分,使得复杂度由$O(n^2 logn)\rightarrow O(n log^2n)$。 代码如下 cpp include using namespace std; con 阅读全文
posted @ 2018-10-26 16:52 shellpicker 阅读(269) 评论(0) 推荐(1)
摘要:题目:给定一个序列,求其第 K 大的数是多少。 时间复杂度$O(n)$ 代码如下: cpp include using namespace std; const int maxn=5e6+10; inline int read(){ int x=0,f=1;char ch; do{ch=getcha 阅读全文
posted @ 2018-10-24 18:54 shellpicker 阅读(167) 评论(0) 推荐(0)