首页 > 其他 > 详细

permu

时间:2019-07-26 23:40:40      阅读:177      评论:0      收藏:0      [点我收藏+]

莫队+权值线段树

某个区间[l,r]中,最长的值域 连续段长度

让我联想到了旅馆Hotel那题。

类似的做法,我们只要对权值建线段树,同样是维护从l开始的最长连续段lw[],同理rw[],以及区间中最大的连续段mw[]

然后依然是类似的up()

inline void up(int k)
{
    lw[k]=lw[k<<1];
    rw[k]=rw[k<<1|1];
    if(lw[k<<1]==siz[k<<1]) lw[k]+=lw[k<<1|1];
    if(rw[k<<1|1]==siz[k<<1|1]) rw[k]+=rw[k<<1];
    mw[k]=max(max(mw[k<<1],mw[k<<1|1]),rw[k<<1]+lw[k<<1|1]);
}

这样我们只要每次询问维护莫队,然后$O(1)$查下$mw[1]$就得出了答案

时间复杂度$O(n \sqrt {n} logn)$

 

permu

原文:https://www.cnblogs.com/hzoi-yzh/p/11253067.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!