Luogu6578 [Ynoi2019] 魔法少女网站
第十分块。
题意:给出一个序列,支持:
单点修改
查询
有多少子区间的最大值
允许离线,
离线
若考虑分块,由于是 pair 贡献,难以够对每个整块分别计算,那么就无法使用离线逐块处理的办法降空间。
离线而空间小的做法,不妨思考一下莫队。
我们有四个维度:操作时间 ,
本题的数据范围较大,根据经验,最简单的带修莫队也极限只能在
想要做到
时间这一维处理起来最困难,是必然要维护的(否则也就可能可以在线了?)。而左右端点维护难度应是相同的,要么都维护,要么都不维护。
这样看来,我们最好尝试在莫队中维护(时间,
维护一个
考虑如何实现一个
我们发现
使用分块,对每块记录块内权值和,极长
查询时,对边界散块暴力算出上述信息,然后将各个块合并,复杂度为
修改时,对每个块分别维护。对于每个段,在其两端维护段的另一端(类似双向链表),这样就能支持
然后还需特判是否扩展了 前/后缀。
由于我们不支持
让时间维乱跳,
将可能被回滚影响到的
时间维回滚时会撤回操作,用栈记录撤回信息即可。
综上,时间复杂度为
在线(口胡)
考虑分块。
询问时将
散块暴力。对于整块只需要得到左侧连续
注意到对于每个块只产生
利用插入排序,重构一个块容易做到
查询时需要二分。用分散层叠可以优化到