分治与CDQ分治

发布时间 2023-11-13 21:58:39作者: peng1984729

CDQ分治与分治

将一个O(n2)优化为O(n log n)。

一般来说当我们n2暴力枚举所有元素对时,会发现有的元素对对ans没有贡献,是多余的无用的冗杂的

所以我们需要选择与计算一些初步判断下对ans更可能有贡献的元素对。

CDQ分治与分治便是一种优化方式,重点便是同级区间的优秀合并。

例题:P7883 平面最近点对(分治

大意:在平面上找到两个最接近的点。(n<=1e5)

暴力枚举每一个点对显然会超时,从暴力考虑优化会发现,对于点对(x1,y1),(x2,y2),

d(当前已求到的最近的两点的距离),只考虑|x1-x2|<=d且|y1-y2|<=d的点对。

使用分治则是二分对于每一个mid左右扩展。

分治与CDQ分治的区别:

分治:同级区间之间互相没有联系

CDQ分治:同级区间之间可能会有联系

模板:

void merge(int l,int r){
	int mid=l+r>>1;
	if(l>=r) return ;
	merge(l,mid),merge(mid+1,r);
	/*
	合并部分 
	*/ 
}