题目大意:
在n个数字中找出k个不相同的长度在l-r之间的连续子序列,使得权值和最大(n<=500000,k<=500000)
昨天膜拜了一下10年的年鉴
这道题合法的子序列是非常多的,如果朴素显然是无法做出这道题
有一个非常美妙的想法,对于给定的起点,起点的权值已知了,子序列的个数是确定的
那么记录一下前缀和s[i],对于给定的起点,实际上就是询问起点所代表的那一段区间的最大权值,这个就是RMQ问题,ST算法可以在O(nlogn)-O(1)的时间完成
那么对于每个点i,有一个pos[i]指向i所对应的区间里s[j]的最大值
用堆来维护一个五元组(st,idx,l,r,v),st代表起点,idx代表起点对应的区间里最大值的下标,l,r代表对应的区间,v代表这个子序列的值
那么我们每次从堆中取出这样一个五元组以后,要将区间分裂,因为i-j这个区间不能取了,所以要将(st,idx,l,r,v)分裂为(st,idx‘,l,idx-1,v),(st,idx’‘,idx+1,r,v)两个区间
由于最多取k个,堆中最多有n+k个元素,时间复杂度为O((n+k)log(n+k))
具体实现看代码
还有一种方法不分裂区间,而是转而记录应该取这个区间里第k大的元素,这需要用到划分树or归并树这一数据结构,由于多年不写已经忘记……
so,这道题可以作为划分树or归并树的练习题,到时候再写一次
划分树版本:
分享到:
相关推荐
NOI大纲NOI大纲NOI大纲.pdf
Noi.openjudge.cn的离线版本,包含了所有试题。由于这个网站老是崩溃或者维护,就扒下来搞了一个离线版本。可以当成手册没网的时候用来刷题。
noi.openjudge.cn 1.2题库答案
最新noi2099解题报告.包含源程序.标注以及解答.
全国青少年信息学奥林匹克竞赛NOI简介.pdf
NOI题库1.6一些题目,可供初学者参考
NOI2021Day2
全国信息学奥林匹克决赛 NOI 2016 第一试 试题
NOI2015day1数据,本人亲测可用!
【ACM/NOI/CSP】NOI嘉年华 solution and code of NOI比赛经验分享&代码程序资源 ACM/NOI/CSP比赛经验分享&代码程序资源 说明:solution and code of NOI 文件列表: NOI嘉年华\NOI嘉年华.docx (61480, -04-26) NOI...
SPOJ3 AC程序 BF SPOJ3 AC程序 BF SPOJ3 AC程序 BF
noi2010测试数据
个人写的,求Rp+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
noi以前的题目,现在这些题目在网上已经很难找到了
给为热爱NOI的发烧友们献上的文档
信息学奥赛-省选及NOI(2020.08.17).pdf
NOI2015day2数据,本人亲测可用!
2015年NOI全国青少年信息学奥林匹克竞赛试题——Day3,官方pdf原版
NOI图论大全.pptx
信息学奥赛 省选及NOI_PDF-2020.12.29.rar