CF1635F 筆記

CTHOOH發表於2024-03-09

好題啊。

題意

給定 \(n\) 個二元組 \((x_i, w_i)\),保證 \(x\) 升序。有 \(m\) 個詢問 \([l, r]\),對於每個詢問求出:

\[\min\limits_{l \le i < j \le r}(x_j - x_i) \cdot (w_i + w_j) \]

題解

一個精妙的結論:

  • \(L_i\) 表示 \(i\) 左邊第一個滿足 \(w_j \le w_i\)\(j\)\(R_i\) 表示 \(i\) 右邊第一個滿足 \(w_j \le w_i\)\(j\)
  • 一個詢問的答案的最優 \((i, j)\) 一定在 \((x, R_x)\) 或者 \((L_x, x)\) 處取到。

證明:反證法。假設最優處在 \((i, j)\)\(i \neq L_j \land R_i \neq j\)。那麼一定有 \((i, L_j)\) 或者 \((R_i, j)\) 更優,原因如下:
因為 \(w_{L_j} \le w_j\)\((w_i + w_{L_j}) \le (w_i + w_j)\) 並且還有 \((x_{L_j} - x_i) < (x_j - x_i)\)。故乘積更小。
所以 \((i, j)\) 有更優處,與假設矛盾。證畢

於是有了這個結論之後,不難用樹狀陣列維護答案,複雜度 \(O(n \log n)\)

這道題的結論同樣啟示我們,對於這種 RMQ 問題(或者取全域性最小值的問題),都要嘗試思考一下最值在哪些位置取得,這些位置的性質是什麼等等。

程式碼: