Gym 101962I Colonial Mansions(二分答案 + 数据结构)
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 ∣hi−hi+1∣≤H。
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} 1≤n,q≤105,0≤hi,H≤109。
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)。

浙公网安备 33010602011771号