分治
分治的基本思想
对于一个问题,分成两个部分分别处理后再合并答案。
cdq分治
基本概念
cdq分治是指一类先算左边,再算左边对右边贡献的分治。
基础例题
三维偏序
题意
有 n 个三元组 ( a i , b i , c i ) (a_i,b_i,c_i) (ai,bi,ci),对于每个三元组,你要求出有多少个其它三元组 ( a j , b j , c j ) (a_j,b_j,c_j) (aj,bj,cj) 满足 a j ≤ a i , b j ≤ b i , c j ≤ c i a_j \leq a_i,b_j \leq b_i,c_j \leq c_i aj≤ai,bj≤bi,cj≤ci。
数据规模与约定
n ≤ 1 e 5 n \leq 1e5 n≤1e5。
思路
先按 a i a_i ai 从小到大排序,就可以将三维偏序转化为二维偏序,再维护一个树状数组即可。
最长偏序链
题意
有 n n n 个三元组 ( a i , b i , c i ) (a_i,b_i,c_i) (ai,bi,ci),你需要求出最多的三元组,使得他们两两存在偏序关系。
数据规模与约定
n ≤ 1 e 5 n \leq 1e5 n≤1e5。
思路
大致想法和上一题一样,只不过要吧上一题的计数改成dp。
线段树分治
线段树分治是指在把操作放在一棵树上,再用dfs等将树上的信息分治再合并求解。