首先用平衡树做出来了
学了一下传说中SBT,比较好用,编码不是很难
能够写二叉查找树就会写一半了。

平衡树只维护当前的区间,然后查找当前区间的
第K元素。

所以首先把区间从小到大排序,这样可以保证每个
元素只插入一次,删除也只有一次。
如样例。 首先把 1-5  区间元素插入,
到第二个区间 2-7 时,把 1-2 删除, 5-7 插入

SBT插入和删除都是logn,总复杂度nlogn+ mlogm

代码




另外还用数状数组做了下

树状数组的做法和以上相似,只是首先要把离散化一
下, 稍微有些麻烦。插入相当于在树状数据对应元素
增加 1, 删除相当于增加 -1, 查找每 k 元素,相
当于找到 sum 等于 k的最小元素,这个可以二分sum
去求, 总复杂度为 mlogm+ nlognlogn。

不过好像求第k元素有一个 nlogn 的做法, 没学会
还得去看看。


代码


这题还可以用其它数据结构做出
确实是一道练习数据结构的好题啊

posted on 2009-04-12 18:38 Darren 阅读(366) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理