好題啊。
題意
給定 \(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 問題(或者取全域性最小值的問題),都要嘗試思考一下最值在哪些位置取得,這些位置的性質是什麼等等。
程式碼: