CF 380C. Sereja and Brackets【线段树】

题目链接
思路
对于每一个线段树维护以下三个值:
a:结点内没有匹配的左括号数量
b:结点内没有匹配的右括号数量
c:结点内完成“()”匹配的数量

对于每一个结点u维护:
t r [ u ] . c = t r [ u ∗ 2 ] . c + t r [ u ∗ 2 + 1 ] . c + m i n ( t r [ u ∗ 2 ] . a , t r [ u ∗ 2 + 1 ] . b ) tr[u].c=tr[u*2].c+tr[u*2+1].c+min(tr[u*2].a,tr[u*2+1].b) tr[u].c=tr[u2].c+tr[u2+1].c+min(tr[u2].a,tr[u2+1].b)
表示左子树中匹配完成的数量+右子树中匹配完成的数量+左子树中(的数量和右子树中)数量的匹配,取其最小值。
对于该节点剩余的a的数量和b的数量也只要对应的加一下并减去已经匹配完的数量即可。
t r [ u ] . a = t r [ u < < 1 ] . a + t r [ u < < 1 ∣ 1 ] . a − m i n ( t r [ u < < 1 ]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值