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 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)

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页