归并排序 归并算法是在分治的思想下,将数组递归的分为两半,分别排序后,再归并成 整个数组。所谓分治,即分而治之。 优点:对于长度为 N 的数组,无论规模多大,排序所需时间总和 NlogN 成正比。 缺点:排序所需额外空间和 N 成正比。 注意:归并排序的核心不是交换数据。 1. 自顶向下的归并排序 ...
分类:
编程语言 时间:
2020-04-24 23:23:55
阅读次数:
114
"题面" 题解 给个不要脑子的做法。 因为这道题是物品会存在一段时间,对每个时间点求出 $0/1$ 背包的值。然后 $n$ 和背包大小都是 $4000$ 级别,于是考虑线段树分治。 也就是将所有物品丢到线段树上去,dfs 一遍整棵树,将覆盖当前区间的所有物品全部加到 $0/1$ 背包里面去,这样就可 ...
分类:
其他好文 时间:
2020-04-23 21:26:04
阅读次数:
70
问题:输入具有n个整数的向量arr,输出向量的任意连续子向量和的最大值 特殊情况(1、当向量都为正数时,为整个向量 2、当向量都为负数时,为0,即空子串 ) 1、O(n2)的算法 (循环对所有情况进行遍历) 1 #include <stdio.h> 2 #define max(a,b) ((a>b) ...
分类:
编程语言 时间:
2020-04-22 16:35:55
阅读次数:
88
CDQ分治不但能解决三维偏序问题,还能将某些问题的动态版本变成静态。 比如这题是单点修改,区间查询,这样我们就可以将输入的顺序当作时间轴,之后进行CDQ分治 按x轴排序后,对y进行树状数组加减,这道题就变成了x比他小,并且y也比他小的个数查询 这题还用到了简单的容斥原理,也就是二维前缀和的思想来求取 ...
1. 问题 选出数组中第k小元素,采用分治算法。 2. 解析 分:将整个数组分为若干相等的块,各个块排序后找到其中位数。再将各个块的中位数集合,形成一个新数组,再次分块,不断分治后得到最终的中位数m。 治:找到m后,将原数组划分为3个组A1,A2,A3,分别包含小于,等于,大于m的元素。这样可以得到 ...
分类:
其他好文 时间:
2020-04-21 18:49:09
阅读次数:
83
这道题的题意是求 j<i aj<=a0[i] a1[j]<=a[i] 这样的三维上升子序列 发现也是一道三维偏序问题,因此考虑用CDQ分治 对于第一位,我们按照惯例作为时间轴,但是这一次,查询要在前面,因为这里第一位是小于号,所以我们先查询再更改就不会弄到自己 我们将查询的权值设为a0[i],而修改 ...
分类:
其他好文 时间:
2020-04-21 15:24:31
阅读次数:
69
1典型二分法.:在含n(n是2的幂且n>=2)个元素的集合中寻找极大元和极小元。用分治法(二分法)可以用较少的比较次数解决上述问题: 1)将数据等分为两组(两组数据可能差1),目的是分别选取其中的最大(小)值。 2)递归分解直到每组元素的个数<=2,可简单地找到最大(小)值。 3)回溯时将分解的两组 ...
分类:
其他好文 时间:
2020-04-21 13:10:41
阅读次数:
63
基本思想 动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划 ...
分类:
其他好文 时间:
2020-04-20 01:29:59
阅读次数:
88
归并排序 归并排序是一种分治策略的排序算法。它是一种比较特殊的排序算法,通过递归地先使每个子序列有序,再将两个有序的序列进行合并成一个有序的序列。 归并排序首先由著名的现代计算机之父 在`1945 EDVAC`(一台美国早期电子计算机),足足用墨水写了 23 页的排序程序。注:冯·诺依曼(John ...
分类:
编程语言 时间:
2020-04-18 14:12:29
阅读次数:
67
算是一道动态点分治入门题(我太弱了加起来学了三天)。 拿到题首先考虑如何暴力,我们可以随机钦定一个点(不妨就设$1$)为根节点,然后算出补给站设在该点的总花费,然后算出补给站在每个儿子时的总花费,显然最多只会有一个儿子花费比它(当前点)本身小(当且仅当$sum[u] include include ...
分类:
其他好文 时间:
2020-04-18 11:41:14
阅读次数:
59