【牛客网71E】 组一组(差分约束,拆位)

传送门

NowCoder

Solution

考虑一下看到这种区间或与区间与的关系,拆一下位。
\(s_i\)表示前缀和,则:
那么如果现在考虑到了第\(i\)为,有如下4种可能:

  • \(opt=1\),\(x\)\(i\)这位有值,那么就有\(s_r-s_{l-1} \ge 1\)
  • \(opt=1\),\(x\)\(i\)这位没值,那么就有\(s_r-s_{l-1} = 0\)
  • \(opt=2\),\(x\)\(i\)这位有值,那么就有\(s_r-s_{l-1} = r-l+1\)
  • \(opt=2\),\(x\)\(i\)这位没值,那么就有\(s_r-s_{l-1} \leq r-l\)
  • \(s_i>=s_{i-1}\),因为值只有\(0,1\),所以前缀和一定会有这个性质。

所以发现这个就可以差分约束,然后随便搞一下你就发现,只有80pts!!!
80pts代码实现

咦,这是为什么啊?
然后考虑如果一段区间的&是1,显然这一段都是1,所以就可以快速差分然后连边了,这样子,据\(yyb\)说可以加快...

代码实现

代码戳这里

转载于:https://www.cnblogs.com/mleautomaton/p/10617820.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值