先用莫队算法保证在询问之间转移的复杂度,每次转移都需要进行O(sqrt(m))次插入和删除,权值分块的插入/删除是O(1)的。然后询问的时候用权值分块查询区间k小值,每次是O(sqrt(n))的。所以总共的复杂度是O(m*(sqrt(n)+sqrt(m)))的。常数极小。别的按权值维护的数据结构无法...
分类:
编程语言 时间:
2014-12-10 14:03:21
阅读次数:
459
[转载]一篇还算可以的文章,关于可持久化线段树http://finaltheory.info/?p=249无修改的区间第K大我们先考虑简化的问题:我们要询问整个区间内的第K大。这样我们对值域建线段树,每个节点记录这个区间所包含的元素个数,建树和查询时的区间范围用递归参数传递,然后用二叉查找树的询问方...
分类:
其他好文 时间:
2014-11-21 23:11:31
阅读次数:
290
求区间第k大数是多少
用我惯用的线段树写法似乎不适合写主席树,看别人的代码好半天才看懂
用root表示每一个前缀树的根,思想大致是由第i-1个树构成的树建第i个树,由于加入一个数只需要log级别修改,所以建树效率很高。
主席树的精髓在于可持续化,就是说之前区间的信息不去修改它,递推加入新元素的时候,要新开log个空间来存储。因为主席树本身比较占用空间,只需改变这些空间的指向就可以重复利用不变...
分类:
其他好文 时间:
2014-11-15 18:54:35
阅读次数:
136
K-th Number
Time Limit: 20000MS
Memory Limit: 65536K
Total Submissions: 38379
Accepted: 12480
Case Time Limit: 2000MS
Description
You are working for Macrohar...
分类:
其他好文 时间:
2014-11-12 17:55:09
阅读次数:
237
题目大意:给定一个序列,求区间第k小
注意是第k小!!别被题目描述骗到了!!这题求的是第k小!!不是第k大!!!
这题和POJ2104一样,都是求区间第k小,不同的是这题的序列是有重复的
对于有重复的,我们必须先预处理出有多少个中位数能进入左区间,否则就会导致过多的中位数堆积在左区间导致该进入左区间的东西被硬塞进了右区间
其实我只是想说为何网上的处理重复都写的那么麻烦。。。像我这样精简点不...
分类:
其他好文 时间:
2014-09-23 16:27:54
阅读次数:
213
关于主席树:主席树(Chairman Tree)是一种离线数据结构,使用函数式线段树维护每一时刻离散之后的数字出现的次数,由于各历史版本的线段树结构一致,可以相减得出区间信息,即该区间内出现的数字和对应的数量,由于在线段树内,左子树代表的数字都小与右子树,便可像平衡树一样进行K大询问。新建一颗树是\...
分类:
其他好文 时间:
2014-08-09 09:02:57
阅读次数:
350
博主sbit。。。。对于高级数据结构深感无力,然后这些东西在OI竟然烂大街了,不搞就整个人都不好了呢。于是我勇猛的跳进了这个大坑 ——sbit区间K大的裸题,在线,无修改。可以用归并树(\(O(nlog^3n)\)),也可用划分树(\(O(nlogn + mlogn)\))。果断划...
分类:
其他好文 时间:
2014-08-04 01:51:46
阅读次数:
391
题意就是区间第k大……题解:前段时间用主席树搞掉了……如今看到划分树,是在想来写一遍,结果18号对着学长的代码调了一上午连样例都没过,好桑心……今天在做NOI2010超级钢琴,忽然发现用划分树很直观,果断决定再战划分树对着网上的c++代码抄了一遍,A了,可是这编程复杂度有点高,忽然又看见盾哥的代码很...
分类:
其他好文 时间:
2014-07-19 09:32:02
阅读次数:
277
K-th Number
Time Limit: 20000MS
Memory Limit: 65536K
Total Submissions: 35704
Accepted: 11396
Case Time Limit: 2000MS
Description
You are working for Macrohard com...
分类:
其他好文 时间:
2014-05-13 14:07:41
阅读次数:
203