Question 1. [Usaco2004 Dec] Fence Obstacle Course
給定 \(n\) 個柵欄,第 \(i\) 個柵欄的範圍是 \(([L_i,R_i],i)\),初始 Bessie 位於 \((S,n+1)\) 處,不能從中間跨過柵欄,但是端點處可以,問到達 \((0,0)\) 的橫向移動距離最小值。
\(n\leq 5\times 10^4, -10^5\leq L_i < R_i\leq 10^5, -10^5\leq S\leq 10^5\)。
想一下就會發現這不是什麼維護類問題,例如維護到達某一行某個特定列座標的最短距離,考慮 DP。
設 \(f_{i,0/1}\) 表示到達第 \(i\) 個柵欄左/右端點的最小橫向移動距離。
然後就可以 \(\mathcal{O}(n^2)\) 轉移,而顯然一個端點往下走一定是能往下就往下,線段樹預處理 \(p_i,q_i\) 表示左右端點不斷下落後第一個阻擋的柵欄的編號。
時間複雜度為 \(\mathcal{O}(n\log_2 n)\)。