神秘題,我現在還沒有理解這個東西的本質。
直接維護自然很寄,我們有兩種思路:
- 把 \(K\) 的限制轉化掉,用資料結構維護之。
- 弱化貢獻,轉化為單點極值。
對於第二種思路,我進行了這些嘗試:
- 轉化為 \(a_x\) 加上 \([x-K+1,x-1]\) 的最大值。
- 二分答案。
- 嘗試觀察一次操作後的影響。
想了很久不會 qwq。其實是沒有注意到經典演算法運用的條件。
第一種嘗試中沒法做的根本原因在於,不能維護修改。
進一步的,是不能維護刪除。
這個時候思路就出來了。線段樹分治即可。\(\mathcal O((n + q)\log n\log q)\)。
這個方法相對平凡,有沒有厲害做法?
dottle 的題解中說明了,按 \(K\) 分塊後答案一定包含某個段中的最大值。然而我並沒有想清楚這個演算法的本質,按 \(K\) 分塊在我看來只是為了探尋隱含的性質,畢竟直接在原序列上分析很難得到。但是 motivation 是什麼呢??!
相對來說 ღꦿ࿐ 大神的思路看起來更有跡可循。