摘要: 做了几道划分树的题目,划分树的效率很高,用来求区间第K小值和区间小于K小值的和,每次动态询问的复杂度为O(logn)。其中POJ2104,POJ2761,HDU2665为典型的求区间第K小值,HDU3743还加上了求和的操作,推荐去做一做。 下面是HUD3743的代码: 1 //STATUS:C++_AC_343MS_30048KB 2 #include<stdio.h> 3 #include<stdlib.h> 4 #include<string.h> 5 #include<math.h> 6 #include<iostream> 阅读全文
posted @ 2013-04-22 14:02 zhsl 阅读(428) 评论(0) 推荐(0) 编辑
摘要: 盗了别人的资料。。。其实看下面的一个图片就知道划分树的结构了,和归并排序极为相似: 注意:一定要注意其中中位数有多个相同的情况,需要统计。例如,上图第一次操作,只有一个3到了左区间。下面是具体的讲解:TonyShaw 如果对于一段区间,仅查找一次第k大元素的话好说,直接一个快排搞定。 如果有多次离线询问,然后就可以通过归并排序,建一棵归并树(nlogn)对于树的每一个节点,通过归并排序递归的建立一个序列,其中每个节点[l,r]表示原序列中,[l,r]这些数字排序以后的状态。如图,红色节点表示会被分到左子树。 就这样,在区间[l,r]查找第k大元素的时候,先二分枚举元素x,求出x... 阅读全文
posted @ 2013-04-22 13:52 zhsl 阅读(227) 评论(0) 推荐(0) 编辑