请升级 HydroOJ 到 4.16.0 以上版本以正常使用此插件功能。

1 条题解

  • 0
    @ 2025-3-13 14:32:32

    这个题应该有一档不带修的部分分,但是我懒了。

    考虑一下上面这个咋做。首先平方这个函数的凸性是显而易见的,所以我们每次一定会找到一个补给匮乏度最大的路径上的点给它 -1。这个形式不太优秀,转化一下变成找到一个最小的阈值 xx 使得可以把所有 >x>x 的变成 xx,最后把尽可能多的 xx 变成 x1x-1。这个 xx 是可以二分的,主席树即可。

    如果尝试在线维护带修版本,至少也会带根号或者多带几个 log,视情况可获得两万和五万的部分分。

    疑似有一个牛逼数据结构能在线不多 log,但我也搞不懂这个。

    考虑离线对 xx 做整体二分。把修改视作删除再增加,那么考虑某个二分中点 midmid 时只有涉及的值大于 midmid 的操作才有用。我们按照时间顺序扫过所有仍然有效的操作,遇到询问操作时需要知道一条路径上大于 mid 点的个数与和,这个可以用两个树状数组维护。由于当二分结束后需要求出答案,还应该再维护一个平方和,这就是三个 BIT。

    一次判断结束后,涉及的值大于 mid 的删除/增加操作和 x>midx>mid 的询问操作向右递归,其它向左递归,复杂度是对的。

    复杂度 2log,由于两个 log 来源是整体二分和 BIT,常数不大,可以轻松通过。

    出题人的小巧思:本题答案需要 int128,如果你没有用会获得 0 分。不过题面里都提醒大家了,应该没人爆零吧?

    信息

    ID
    60
    时间
    2500ms
    内存
    512MiB
    难度
    9
    标签
    (无)
    递交数
    51
    已通过
    6
    上传者