Gym 101962I Colonial Mansions(二分答案 + 資料結構)

ylxmf2005發表於2020-10-24

Description

給定長度為 n n n 的序列 h h h q q q 次詢問

  • 1   i   H 1 \ i \ H 1 i H h i h_i hi 修改為 H H H
  • 2   i   H 2 \ i \ H 2 i H 詢問從 i i i 出發可以移動的數的個數。對於 h i , h i + 1 h_i,h_{i+1} hi,hi+1,它們可以互相移動的條件為 ∣ h i − h i + 1 ∣ ≤ H |h_i - h_{i+1}| \leq H hihi+1H

1 ≤ n , q ≤ 1 0 5 , 0 ≤ h i , H ≤ 1 0 9 1 \leq n,q \leq 10^5, 0 \leq h_i,H \leq 10^{9} 1n,q105,0hi,H109

Solution

涉及了區間操作是線段樹了。用線段樹維護區間內相鄰兩個數的最大差值,如果差值 < H <H <H 那麼該區間的數都可以達到,對於長為一的區間差值可以賦值為 0 0 0。那麼查詢操作時,分別進行兩次以 [ 1 , i ] [1,i] [1,i] [ i , n ] [i,n] [i,n] 兩次二分即可。

線段樹單點修改區間查詢,也不用懶標記。上傳資訊還有查詢時要討論兩個區間相交處對答案的貢獻。時間複雜度 O ( n log ⁡ 2 n ) O(n \log^2 n) O(nlog2n)

相關文章