一搬都是动态修改点权时我们使用动态点分治来保证时间复杂度. 这里说一下深刻的理解,首先建出点分树并不难我们只需要记一个fa甚至不需要记儿子就能维护出来这样的一棵树. 为什么要维护这样的一棵树下面根据例题具体论述: "bzoj3730震波" 1. 每次查询距离x距离不超过y的点权之和. 2. 点权有修 ...
分类:
其他好文 时间:
2020-02-10 22:26:22
阅读次数:
77
Dec 16, 2019 ~ Dec 22, 2019 Algorithm Problem 53 Maximum Subarray 最大子数组 "题目链接" 题目描述:给定一个数组,在所有连续的子数组中,求得其中的最大值,举例如下: 数组:[ 2,1, 3,4, 1,2,1, 5,4] 返回结果:6 ...
分类:
其他好文 时间:
2020-02-09 20:29:38
阅读次数:
53
用分治算法来求一个数组的排序 分治算法:例如:将两个数组a[100]={2,4,5,7,1,2,,3,6}。这个数组排序 先将这个数组分为均两部分得到{2,4,5,7},{1,2,3,6}。 再将{2,4,5,7}分为两部分{2,4},{5,7}。 再分为{2},{4}。 这时一个数就不用排序了,直 ...
分类:
编程语言 时间:
2020-02-09 20:15:51
阅读次数:
56
概述 分治FFT不是一个算法而是一种思想,一般指两种套路$CDQ$分治解决函数问题,分治+$FFT/NTT$合并背包 分治背包 问题 问题形如给出$n$种物品,第$i$种物品有$a_i$个,大小为$w_i$ 答案的生成函数即为$\displaystyle{\prod_{i=1}^n(1+a_i x^ ...
分类:
其他好文 时间:
2020-02-09 18:10:58
阅读次数:
57
分治算法基本思想:将一个规模为 n 的问题分解为 k 个规模较小的子问题,这些子问题相互独立且与原问题相同; 给定已排好序的 n 个元素 array[0:n-1],现要在这 n 个元素找出特定元素x; 首先较容易想到的是用顺序搜索方法,逐个比较 array[0:n-1] 中元素,直至找出元素 x 或 ...
分类:
编程语言 时间:
2020-02-09 16:31:03
阅读次数:
85
时间复杂度O(nlogn) 找一个基数,使得这个基数的左边都比它小,右边都比它大。 双指针实现,从左边找找到第一个比基数大下标为i, 从右边找到第一个比基数小的数下标为j,i、j交换。 i == j 时将基数与a[i]交换,分治继续对(l , i-1) 与(i+1 , r)区间进行排序。 //#in ...
分类:
编程语言 时间:
2020-02-09 09:42:55
阅读次数:
46
题目描述 题解 考虑暴力dp: $f_{i,j}$表示前 $i$ 个分 $j$ 段的最小值,于是 $f_{i,j}=min{f_{k,j-1}+w_{k+1,i}}$ 其实想一下应该会发现上述dp具有决策单调性,于是我们可以分治求出每个 $i$ 的决策点 效率: $O(nklogn)$ 代码 #in ...
分类:
其他好文 时间:
2020-02-08 15:48:26
阅读次数:
60
题目描述 题解 问题在于两棵已经确定点分树的形态的树,合并后能形成多少种形态的点分树 考虑如果分裂 $(u,v)$ 这条边,那就相当于两个点分树黑白染色,各自找相同颜色的祖先,然后形成新的两个点分树 考虑如果连接 $(u,v)$ 的话,那应该就是 $u->rt_u$ 和 $v->rt_v$ 这两条路 ...
分类:
其他好文 时间:
2020-02-08 15:18:30
阅读次数:
78
需要重点以下10种数据结构和10种算法: 10 个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树 10 个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法 ...
分类:
编程语言 时间:
2020-02-08 13:41:32
阅读次数:
88
一: 区间问题:什么时候用线段树,什么时候用ST 如果需要动态维护,需要添加或者删除,那么就必须用到线段树,线段树的单次查询时间为O(logn),如果查询量大还是很浪费时间。 在不需要动态维护的时候,ST算法的查询速度可以到达O(1) 二: 【什么样的问题适合ST算法】例如,RMQ问题和RGQ问题适 ...
分类:
其他好文 时间:
2020-02-07 14:42:26
阅读次数:
76