poj2761

此题算是一个练习各种树的题目。。此题是求区间k大值,可以用各种方法做。线段树,树状数组,avl,treap,sbt,splay,划分树做。。。。

展示不会划分和avl还有sbt 用treap写的

此题本来按照书上的写法写的。。但是觉得书上那种写法搞不好会有内存溢出的情况。。。其实就是new的多了。但是delete不掉。如果是一个输入文件包含多组数据的话,不能清空以访问的内存,那么就有可能re了。那么我这用的是静态的写法。我开了一个内存池pool来存。那么new的方法就是自己写一个,每回赋空间给new节点就好了。


然后此题做法呢:我后来看discuss的时候看到有完全覆盖区间的问题,由于题目说了无完全覆盖,但是我觉得完全覆盖也是没问题的。

我是离线用treap维护

那么先将所有的问题存起来,然后按R的位置降序排序,那么我每回从第i个问题L到R放入树中,当下一次的时候我删除没有统计到的即我只保留当前的L,R区间。然后在find第k小值。那么假设要删除的个数是num,删除的复杂度是NUM*logn一共M次询问第一次可以不删除所以是(M-1)*NUM *log n 加入的复杂度差不多

在n<100001 and m<50001.是可以接受的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值