线段覆盖 (线段树)

有一根长度为 L L L 的白色条状物。有两种操作:

  1. 用一条长度为 T T T 的黑布盖住条状物的 [ a , a + T ] [a,a+T] [a,a+T] 的这个区间
  2. 把某条黑布拿走

输入 L L L n n n 次操作,要你输出每次操作之后

  1. 条状物上有多少个黑区间
  2. 条状物上黑区间的总长度

观察出题目的询问每次都是一样的,其实也只有一种修改(添和删相当于互逆操作)

我们可以建一棵线段树

v v v 表示有多少个黑区间

l e n len len 表示黑区间的总长度

t a g tag tag 表示该区间添加的整布条数

显然答案就是线段树的根节点的数据

那么怎么维护这些信息?

我们继续记录一下信息:

l b d lbd lbd 表示该区间左端点是否覆盖

r b d rbd rbd 表示该区间右端点是否覆盖

先看如何上传

  • 如果 懒标记为正,那么整个区间显然全部被覆盖,那么 v = l b d − r b d = 1 v=lbd-rbd=1 v=lbdrbd=1, l e n = r − l + 1 len=r-l+1 len=rl+1
  • 否则,那么我们要通过左右儿子的信息去得到它的信息

显然 l b d ( x ) = l b d ( l s ( x ) ) , r b d ( x ) = r b d ( r s ( x ) ) , l e n = l e n ( l s ( x ) ) + l e n ( r s (

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值