20260318 紫题训练

T2

原问题等价于单点修改,给区间每个数 \(i\) 加上 \((i-l+1)t\) 和区间 \(\max\) 查询。

给区间每个数 \(i\) 加上 \((i-l+1)t\) 不好维护,考虑分块。

分块之后若一个块的首位置(\(l\))增加的是 \(at\),给整个块打上加 \(at\) 的标签,那么相当于再给每个位置增加 \((i-l)t\)

除去整块加的标签一个块内一个元素的值是 \((i-l)\sum t+a_i\)

\(2\) 操作直接遍历交换的位置所在的整块求出值,直接交换就行。

赛时想的是用李超线段树维护 \((i-l)\sum t+a_i\)\(\max\),但时间复杂度会多个 \(\log\),无法通过。

事实上,由于 \(\sum t\) 单调递增,能成为最优解的位置一定成下凸壳,可以用单调栈维护。

posted @ 2026-03-18 16:19  Jokersen  阅读(2)  评论(0)    收藏  举报