首页 > 代码库 > 【BZOJ】
【BZOJ】
【算法】堆+贪心+RMQ
【题解】
考虑暴力是把所有满足要求的子串算出答案,取前k小的,O(n^2)。
考虑优化,将左端点为x,右端点为x+L-1~x+R-1的子串视为一类。
所以定义三元组(x,l,r)为一类,其中l=x+L-1,r=x+r-1。
在一类中我们第一步应该取一类中的最大值,即取max(sum[l~y]),l<=y<=r。
max(sum[l~y])转化为求max(sum[1~y]-sum[1~l]),显然一类中sum[1~l]相同消去,即求max(sum[1~y]),维护前缀和并用RMQ的ST表O(1)查询。
所以定义三元组(x,l,r)的值为max,坐标为y,按值加入堆。
取出三元组(x,l,r)后加入两个三元组(x,l,y-1)和(x,y+1,r)。
本题的特点是利用同一类可以O(1)求答案来优化的。
【BZOJ】
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。