小Q与找茬

Posted cszmc2004

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小Q与找茬相关的知识,希望对你有一定的参考价值。

题目要求我们在线二维数点。

看到二维很容易想到用树套树维护。时间复杂度为O((n+q)log^2n+点数*logn)

但是其实不用树套树。

题目中没有修改,所以可以对x轴建线段树,每个节点维护一个从小到大排序的表表示这个区间管辖的节点的y值。

每次可以两次二分求得询问区间,再O(点数)询问合法点数。

但是其实只用一次二分,二分出左端点后用一个指针从左端点扫到表尾,超出范围break即可。

时间复杂度降为O((n+q)log^2n+点数)。

可以归并有序表,时间复杂度再降为O(nlogn+qlog^2n+点数)

一个优化(个人认为比较难想到)是:在递归的时候存储一个变量p,表示当前节点二分值。

每个节点的存储另外两个表p1,p2,p1[i]表示第i节点在左儿子中第一个>=第i节点y值的点的编号,p2[i]表示第i节点在右儿子中第一个>=第i节点y值的点的编号。

开始在根节点处二分求得p。

然后在递归到子节点时,会发现由于子节点的点数变小,子节点的p值只会变大,且值为左/右节点的p1,p2值。

把左子节点的p值设为p1[p],右子节点的设为p2[p]继续递归即可。

在到达需求(线段树定位出来的节点)点时用一个指针从左端点扫到表尾,超出范围break即可。

时间复杂度降为O((n+q)logn+点数)

 

以上是关于小Q与找茬的主要内容,如果未能解决你的问题,请参考以下文章

基于OpenCV 图像处理的Android 找茬App 设计与实现

c语言链表插入问题,pta提交有个段错误,请各位大佬帮忙找找茬,感激!

大家来找茬 两幅图像相减 其它好的实现? 美女找茬

你算个什么鸟?AI十级“找茬”选手诞生

软件测试软件测试是找bug,不是找茬

20多名产品经理集聚在超市,买东西还是找茬?