QBXT Jinan Day2


Day2上午

一、基本分治

例题一、归并排序

如题…基础排序之一。

二、树分治

①点分治

原则上要尽量减小递归层,而考虑删去当前某节点之后,剩余节点数量最多的联通块尽量少,此时递归层数一定是最小的。这个节点就是“重心”。
重心可以$O(n)$DP求得

例题一、IOI2011 Race

给定一颗$n$个点的带边权的树,求一条路径使得权值和为$K$且边数量最少。
$1\le n \le10^5,K\le10^6$

思路

点分治,记录到根路径长为dist[i]的最小边数即可

②边分治

选择一条边删去,得到两颗不相交的子树,统计这条边的信息。
选边方法与点分治的选点几乎一致。

一个优化

我们发现菊花图可以轻松卡掉边分,于是我们考虑重构这颗树,使得度数最大的点度数最小,采用的策略是加虚点(个人喜欢左孩子右兄弟)关键是两点间路径经过的实边不能变。

例题二、bzoj2870

题面见bzoj2870

思路

采用边分治。考虑删去一条边以后这条边的两端$a,b$,考虑将a端子树和b端子树中的链按点权最小值排序,对a端来说,每条链选b端中点权最小值不小于这条链且最长的链,b端同理,如此就可以做出这道题。

③链分治(树链剖分)

略(太过于模板)

三、CDQ分治

普通分治:将区间分成两部分递归求解后合并。
CDQ分治:在普通分治基础上需要加上左半区间对右半区间对贡献得到答案

例题一、二维偏序

(上一篇好像有一样的题)

思路

首先进行双关键字排序
根据CDQ分治,不断递归至区间长度为1
关键在于计算贡献
考虑到子区间贡已经求出,我们将两个区间按第二维进行排序,如果左区间的一个有序对$(u,v)$对右区间的一个有序对$(a,b)$产生贡献,那么就等价于$v<b$,双指针扫一遍即可。
又考虑到我们按b排序,显然用归并复杂度比较优秀。

四、整体二分

整体二分需要满足五个性质:
①询问的答案具有可二分性(单调性)
②修改对询问是独立互不影响的。
③不同的修改贡献可叠加,不用重复计算
④贡献满足交换律、结合律,有可加性
⑤题目允许离线
实现起来就是将所有询问一起二分

例题一、Meteors

题面见SP10264

二分答案,线段树模拟当前区间的修改

五、三分

用于求解凸函数(单峰函数)

六、分块

整块整体做,边角暴力做

七、莫队

将询问离线排序,优化暴力过程。

八、树上莫队

借助欧拉序(括号序)将树上问题转换成区间问题,其余与莫队大致相同。

九、块状链表

Day2下午

今天下午是考试,结果…
T1文件名写错,T2感觉没问题莫名wa掉,T3空间开小——
完美爆0(解决上述问题后拿到60分暴力分)
然后发现T2逆序对求错。。。
总之以后细心更重要。
题目暂时就不贴了。。。打完再来发