归并排序(merge sort) 顾名思义,这是一种排序算法,时间复杂度为O(nlogn),时间复杂度上和快排一样 归并排序是分治思想的应用,我们先将n个数不断地二分,最后得到n个长度为1的区间,显然,这n个小区间都是单调的,随后合并相邻的两个区间,得到n/2个单增(减)的区间,随后我们继续合并相邻 ...
分类:
编程语言 时间:
2019-09-02 23:50:01
阅读次数:
110
[TJOI2013]拯救小矮人 nlogn贪心Hack征集 考试的时候忘记了DP,乱搞了一个贪心。DP是枚举每一个人选或不选,而贪心是先排序,然后能走就走,不能走就找一个(已经走了的或当前这个)最大的垫在下面。详细见代码。求一组hack数据,已经和正解大数据小数据拍了过百万组,和机房大佬手动思考ha ...
分类:
其他好文 时间:
2019-08-30 22:31:12
阅读次数:
61
题目:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4 A1:先把数组排序,然后输出前面的K个数 > O(nlogn) A2:当可以修改数组时可以,把第k个数为基准,把所有比第k个数字小的所有数字位于数组的作变,比第k个数字大的所 ...
分类:
其他好文 时间:
2019-08-30 21:03:24
阅读次数:
76
A.挑战(challenge.cpp) 首先令$x_i=max(a_i k,0)$,即破坏第$i$个防御区域的代价. 设$dp_i$表示从$1...i$需要的最小代价,有状态转移方程:$dp_i=min(dp_j)+x_i$,其中$i L\le j\le i 1$. 初始化边界$dp_0=0,dp_ ...
分类:
其他好文 时间:
2019-08-27 23:15:55
阅读次数:
110
#include <iostream> #include <list> #include <sstream> #include <map> #include <set> #include <queue> #include <map> #include <functional> #include <a... ...
分类:
编程语言 时间:
2019-08-27 21:20:04
阅读次数:
105
十大经典排序算法(动图演示) 转: 0、算法概述 0.1 算法分类 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下 ...
分类:
编程语言 时间:
2019-08-27 20:58:08
阅读次数:
68
ST表类似树状数组,线段树这两种算法,是一种用于解决区间最值查询问题的离线算法。与线段树相比,预处理复杂度同为O(nlogn),但查询复杂度ST表为O(1),比线段树查询O(lgN)小,但就不涉及修改的区间查询而言,ST表无疑是更好的选择。 ST表主体,即st[i][j],表示数据数组a[ ]从下标 ...
分类:
其他好文 时间:
2019-08-23 00:09:44
阅读次数:
80
首先考虑归并排序: 归并排序为什么能相比普通的排序方法,将时间复杂度从O(n^2)提升至O(nlogn)? 最主要的一点是引入了两个有序数组合并的思想,真正提升效率就是在这个地方。 首先我们考虑,如果两个数组无序的话,比如: 如果使用O(n^2)的方法,在这样一个数组中,每一个数都要跟其他的数比较一 ...
分类:
编程语言 时间:
2019-08-22 11:05:07
阅读次数:
98
传送门:P3942 这道题要求我们对所有长度为m的序列,找出其中最大值和最小值的差值不超过c的,并输出它们的起始位置。 看到静态序列最值问题,很自然的想到要用ST表进行Θ(nlogn+n)预处理、Θ(1)查询。但是很不幸,如果直接用两个表分别存储最大值和最小值,最后一个点妥妥的MLE,因此我们需要对 ...
分类:
其他好文 时间:
2019-08-20 21:49:43
阅读次数:
87
ST算法是求解RMQ问题的好方法,可以在0(NlogN)的预处理后实现O(1)的查询。该算法是在倍增的思想基础上实现的,比较基础,理解起来也不难。 补充几个要点: RMQ问题:即区间最值问题,给出一个序列a,要求求出区间[l,r]内的最大值。 倍增:(来自lyd的蓝书) log2(x)函数:返回$l ...
分类:
编程语言 时间:
2019-08-20 14:05:03
阅读次数:
92