洛谷2025省选测试D1T2“羽毛” 题解

洛谷2025省选测试D1 T2“羽毛” 题解

快进到:本题可以转化为,每次询问给定 l,r 求:

maxxst.i=0xci=x+1ci=j=lr[aj=i]

赛场思路:“一个位置 p 加上 1 后,根据前缀和,p~n 的所有位置加1,假设上一次答案为q
那么新的答案必定在 [max(p,q+1),n] 中产生。
而这些数在之前都没有超过0,若有新的答案,其必定是区间最大值。
于是维护区间最大值可以解决 。对于在 p 位置上减 1,那么 q[p,n] 可能让 q 不为答案,这时可能有正数减为0,但原本是有负数的所以做不了
即:可以插入,不能删除,可以回滚莫队,复杂度O(nqlogn)

然而常数太大,没暴力快。

F([l,r],x)=i=0x(j=lr[aj=i]1),由于考场上我认为 F([l,r],x) 不单调所以不能二分,每次重新找位置是 O(n),才用回滚莫队,但实际不是。

如果在值域线段树上维护区间 F([l,r],x) 最值,每次左右递归的时候看右区间的 mx 是否大于 0 即可。

即使域不单调,也可以线段树上二分求解想要的信息,因为它维护区间信息,而不是单点求值。

那么就没必要用回滚莫队,常数大大减小。

出题人说可以做到 O(nn) 但我不会。


可以看出来这道题离线不带修就是让你扫描线的。但扫 l,r 都很难做

答案很小的时候,可以直接对答案域进行扫描线,转而同时维护所有询问的信息。

ans=n1 ,设此时 ans=x,若 F([li,ri],x)=x+1,则马上确定 ansi=x,不再考虑 qryi

现在 ans:xx1,即要删去 x 的贡献,令 ai=xi[li.ri],F([li,ri]) 自减 1

然后就发现做不了,因为这关心两维限制,而我们不能再扫描线降维了。

同时关心多个区间,可以考虑排除包含的情况,简化问题。

发现若 [lj,rj][li,ri] 即区间包含,则 ansjansi,当没有确定 ansi 时,ansj 一定不会被确定,此时没必要考虑。

于是被考虑的区间不包含。

对于不相互包含的区间,排序后,包含位置 i 的区间,一定连续。

那么我们就可以用线段树或平衡树维护,复杂度 O((n+q)logn)

如何找到应该被插入的区间?

我们将区间排序后,建立一个线段树维护 maxi[L,R]ri。这样当一个区间 [li,ri] 被删除时,找到上一个正被考虑的区间 lst ,下一个正被考虑的区间 nxt 那么对于所有 lst<i<nxt,ri>rlst 且没有被考虑过的 i 应该被插入,这就不断找变成查询区间中第一个满足 ri>rlsti,可以线段树上二分解决。

作者:lupengheyyds

出处:https://www.cnblogs.com/lupengheyyds/p/18738793

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   lupengheyyds  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示