- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
                        查看更多
                        
                    
                主席树	——By 徐亦轲HDU2665给定n个数字,m个询问,每次求[L,R]内的第k大值N=100000询问次数=100000线段树?然而只能查最大主席树【可持久化线段树/函数式线段树】(Persistent Tree)一种神奇的数据结构一种离线数据结构可以查询区间第k大复杂度log(n)名词解释:在线/离线在线就是一边读数据一边处理离线就是把所有数据读完一起处理假设只要求所有数字中第k大?先将所有数字离散化(排序+去重)(所以是离线)对离散化后的数字建立一颗线段树,每个节点统计当前数字范围内的数出现了多少次自顶向下查找,如果左边区间个数大于等于k则在左边,小于则在右边所以复杂度log(n)那么对于任意一段区间[L,r]..建立n颗线段树,每棵维护[1,i]的数字出现情况则[L,R]=[1,R]-[1,L-1](前缀和思想)然后查找就可以了然而还有一个问题n棵线段树,每棵2n个点,怎么也是n2的空间MLE?我们有神奇的解决方法注意到每棵新树都是上一棵树改了一条从某叶子到根节点的路径那么除了这条路径,其他的都可以直接从上一棵树上蒯过来大概就长这样了--那么空间复杂度O(nlogn)所以HDU2665代码略长不贴了想看的/2015/12/%E3%80%90%E4%B8%BB%E5%B8%AD%E6%A0%91%E3%80%91hdu2665-kth-number/http/2015/12/%E3%80%90%E4%B8%BB%E5%B8%AD%E6%A0%91%E3%80%91hdu2665-kth-number/:///2015/12/%E3%80%90%E4%B8%BB%E5%B8%AD%E6%A0%91%E3%80%91hdu2665-kth-number/2015/12/%E3%80%90%E4%B8%BB%E5%B8%AD%E6%A0%91%E3%80%91hdu2665-kth-number//C++的同学们:unique可以快速去重lower_bound可以快速找到原数在离散化后的排名【STL大法好】如果要动态求区间第k大(即支持修改操作)?1 = N = 50,000,1 = T = 10,000主席树是用前缀和来维护的查询为O(1),但修改为O(n)如果不用前缀和,则查询为O(n),修改为O(1)有没有折中的办法?还记得之前学的树状数组吗?不正好可以用在这个地方?Bzoj 1901/ZOJ2112 Dynamic Rankings给你n个数,m次操作,每次修改一个数或者求一段区间内的第k大值。(n=50000,m=10000)Bzoj 1901/ZOJ2112 Dynamic Rankings首先读入所有数和全部操作,将会出现的数离散化,以树状数组结构建立主席树;修改和查找和普通主席树相似,只不过使用了树状数组。Bzoj 1901/ZOJ2112 Dynamic Rankings代码链接:/?p=990preview=truehttp/?p=990preview=true:///2016/01//?p=990preview=true【bzoj1901】dynamic-rankings/?p=990preview=true/是不是特别简单?THE END
                 原创力文档
原创力文档 
                        

文档评论(0)