凡是高效的排序算法无疑都是采用了分治的策略。我们先来看一下什么是分治的思想: 分治法,字面意思是“分而治之”,就是把一个复杂的问题分成多个相同或相似的子问题,再把子问题分成更小的子问题直到最后子问题可以简单地直接求解,原问题的解即子问题的解的合并。即,分治法的思想是将原问题拆解成相同或者相似的子问题 ...
分类:
编程语言 时间:
2020-03-13 20:59:38
阅读次数:
59
百度百科: 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排 ...
分类:
编程语言 时间:
2020-03-13 01:33:43
阅读次数:
62
上一篇博客写了分治解法以及为什么要用分治。 分治通过我们对子问题的定义,实例化了我们每一步计算的语义,从而帮助我们找到解空间中的重复结构。 在进行分治时,我们找到了分割问题,并用子问题的解表示问题解的方式,也就是状态转移方程: 整个分治的计算过程分为两个阶段,向下分割问题,向上汇聚子问题的解从而得到 ...
分类:
其他好文 时间:
2020-03-13 01:20:44
阅读次数:
64
题目大意: $1 \le l \le n \le 10^5$ 题解: 写完之后觉得我死了,这应该是我做过的最复杂的分治NTT。 设$p[i]$表示第$i$个点概率,为了表达方便,先把$p[i]$ reverse一下。 设$P(i)=p[i]·x+1 p[i]$ 考虑设$f[i]$表示从第$i$个点出 ...
分类:
其他好文 时间:
2020-03-12 23:39:15
阅读次数:
79
算法思想 快速排序是基于冒泡排序的改进,是基于分治思想。 在待排序表L[1...n]中选取一个元素(base)作为基准,一次排序后将排序表划分两个部分L[1...k-1]和L[k+1...n],其中L[1...k-1]中的元素小于base,L[k+1...n]中的元素大于base,然后将base放到 ...
分类:
编程语言 时间:
2020-03-12 09:56:00
阅读次数:
61
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。把长度为n的输入序列分成两个长度为n/2 ...
分类:
编程语言 时间:
2020-03-11 23:21:37
阅读次数:
105
P3810 三维偏序(陌上花开) CDQ分治模板题 第一维直接排序,第二维用分治,第三维用树状数组 ...
分类:
其他好文 时间:
2020-03-11 01:13:00
阅读次数:
49
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 输入描述: 题目保证输入的数组中没有的相同的数字数据范围: 对于%50的数据,size ...
分类:
编程语言 时间:
2020-03-09 17:39:50
阅读次数:
66
题目描述 题解 首先我们考虑一种做法,对于一棵树考虑枚举每个点为根去 $\text{dfs}$ ,然后建立出特征串的 $\text{SAM}$ ,每次走到的点计算 $\text{right}$ 集合大小即可。效率为 $O(size^2)$ 。 考虑另一种做法,我们可以点分治,考虑 $u→x→v$ 这 ...
分类:
其他好文 时间:
2020-03-08 21:58:15
阅读次数:
89
省选模拟35 1.two 线段树 对于给定的一条边,发现在另一棵树上的删边情况只有两种. $$dfn[u]r$$ 所以把所有边二元组插到另一棵树的两棵线段树里(因为用的是ta的dfn序). 在第一颗线段树u处插v,第二颗v处插u. 查询时查询区间内线段树里一维$ l/ 2.bracket 点分治+F ...
分类:
其他好文 时间:
2020-03-08 09:57:16
阅读次数:
52