摘要: 问题给定你一个数列,a1~an,其中n<=100005,给定m(M<=50000)个形如“x y k”的询问,让你输出x到y这段区间中第k小的数是多少。分析如果用快排,时间复杂度是nmlogn一定会超时,那么只好用二叉排序树进行动态维护,时间复杂度接近mlogn,但是单纯的bst还是很有可能超时,所以用treap维护这棵平衡树。基于贪心的思想,尽量少的对树进行操作,对区间的首端点排序,之后按顺序对每个区间进行操作,如果当前区间的数不在已构树中,就加入这些新节点,如果树中多出不在区间中的节点则删去。这样操作m次即可。只需对最基本的平衡树操作多开一个域,记录一个节点的左边有多少儿子即比 阅读全文
posted @ 2011-04-15 17:00 liukee 阅读(566) 评论(1) 推荐(0) 编辑