Summary - 2015.2.3 分治
来源:互联网 发布:淘宝设置自动发货 编辑:程序博客网 时间:2024/05/29 17:26
一、random(序列第K大元素)
随机数列A[1..n] (n <= 5e6), 求第k大元素。
江哥说快速选择思想来源于快速排序。
每次随机挑选数列中一元素a,求出比a小的元素个数l1和比a大的元素个数
l2,若k <= l1,则保留小于a的元素;若k > l1, 则保留大于a的元素,同时
k -= l1。直到数列中元素全部相等。即得到答案。
二、sequence(最大连续子段和)
数列A[1..n],Q个询问:L..R 最大连续子段和 (n <= 1e5, Q <= 1e6)
首先,需要读入优化。
1、线段树(70'):
维护结点的区间和、最大前缀和、最大后缀和、最大连续子段和即可。
话说我写了三个query(),分别对应区间最大前缀和、后缀和、连续子段和,
江哥说只要一个,,不知道该怎么搞啊
2、某分治(100’):
【还未写出,待补充】
三、tree
一颗n个点的无根树,求出树上长度为k的路径总数。(2 <= k <= n <= 1e5)
首先一点,树的分治,一般是点分治,容易被菊花树、挂链之类的卡,所以要求
树的重心(最大子树结点最少的结点)作为根,这样可以使树尽量均匀,防止。
被卡。
考虑过根节点的所有满足条件的路径数 P,
cdep[i][j] :第i棵子树中深度为j的节点数
sdep[j] : 所有深度为j的节点数
则这样可以求得 P
P = sdep[k]; // 特判直接从子树内部连至根的情况
// 以下是两节点分别在不同子树的情况
For i = 1 to MaxDep:
For j = 1 to MaxSubtree:
P += cdep[j][i] * (sdep[k - i] - cdep[j][k - i]);
然后对于每棵子树,提出其重心作为根,重复上述过程。
(P.S. 还没写出来,Q : 这样 DFS 不会 TLE? A by 江哥 : 不会。)
0 0
- Summary - 2015.2.3 分治
- summary(3)
- Summary - 2015.2.5 贪心
- Summary - 2015.2.7 搜索
- Asterisk Summary - 3
- work summary(3)
- Leetcode(3)-Summary Ranges
- Summary
- summary
- summary
- Summary
- Summary
- summary
- Summary
- summary
- summary
- summary
- summary
- 蓝桥杯-算法训练-ALGO1-区间k大数查询
- poj 1469 COURSES (二分图匹配)
- 写了一个基于微信公众平台的图片识别应用!
- Java中return的用法
- c语言输入输出的一些细节
- Summary - 2015.2.3 分治
- [ZOJ3728] Collision && 暴力解方程
- 求子数组的最大和
- 蓝桥杯-算法训练-ALGO2-最大最小公倍数
- struts2中jsp页面跳转问题
- 构造函数及有关函数的调用过程
- 正则表达式30分钟入门教程
- XML----DTD-操作,实体
- 关于在Struts2的Action中使用domain模型接收参数的问题