摘要: 原题传送:http://acm.hdu.edu.cn/showproblem.php?pid=4417 划分树 + 二分。 总复杂度为mlog(n)log(n),在O(10^7)左右,可以破了,二分查询区间第k大值,如果该值小于或等于给定高度,那么继续二分。那么最后得到的k值就是所求。View Code 1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 const int maxn = 100000 + 10; 5 6 int tree[20][maxn], num[20] 阅读全文
posted @ 2012-11-22 19:32 芒果布丁 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 原题传送:http://acm.hdu.edu.cn/showproblem.php?pid=3473 做出这题感觉又帅了。 划分树。 一看题目很容易想到每次查询求的x就是该区间排序后的中位数,再看看规模,不难想出得用划分树nlog(n)。 尽管题目给了8s的时限,然而,如果每次只是求出中位数在循环一遍区间去求答案,也会TLE,所以,另开数组lsum[],在建树的时候记录放到左子树的元素的和,则可在每次询问的时候,如果在树的某一层要进入右子树,那么,该区间进入左子树的所有元素的和都是小于中位数的。 另外,如果这题写丑了会卡掉内存的,当时我写的时候是开两个数组lsum[]和rsum... 阅读全文
posted @ 2012-11-22 18:40 芒果布丁 阅读(176) 评论(0) 推荐(0) 编辑