P8146 [JRKSJ R4] risrqnis

题传

有点有趣。 Orzcyf!

发现序列分块后块内只需要维护 01 序列,支持区间覆盖以及区间和。

然而区间覆盖我没有什么好做法。

值域 [l,r] 覆盖,序列 [l,r] 查。

有什么好做法吗。。。

想不到,想不到啊。

m=1 的做法是简单的,考虑排序后维护未加入的点即可,即若干连续段。考虑每个点只会加入一次,复杂度显然正确。可以用并查集、set、线段树二分之类。

其他的话考虑离线每个集合的操作,然后考虑将用 ODT 将值域区间推平转为值域区间加,然后我们再用一个序列分块,考虑维护下加的操作,那么在序列分块的同时我们只需要维护序列 [bl,br] 的数的是否被覆盖,既然已经将值域转为操作了,发现需要维护块内 [L,R] 值域的 未覆盖的个数,值域 DS 维护即可。

事实上本题比较值得学习的是后面这个做法,即转化为序列分块,那么如何确定不会重复推平?ODT。那么考虑此次值域加对本块的贡献,再考虑完整询问本块的序列区间查。

代码倒是回家写。

事实上是可以根号分治的,但大体 hard 的部分也是在后面。


__EOF__

本文作者F x o r G
本文链接https://www.cnblogs.com/xugangfan/p/15935596.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   FxorG  阅读(57)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示