[PKU 3237]Tree(树链剖分)

【题目大意】:

跟QTREE一样,就是多了一个NEGATE操作,表示将A,B路径上的边权取负。

【题目分析】:

不要小看了这个取反,折腾了我将近一周……

问题在于取反了之后要怎么考虑新加进来的(就是改的边)。

解决方案不消说在线段树,他不是单纯的染色,所以我们为了让它保证正确性,就要牺牲下速度。

现在考虑我如果保证在进行完一个操作后,状态为反的区间为0个,要怎么办呢。我们记录一个flag,表示这个区间的max和min是在正的情况下还是在反得情况下。每次操作之前,为了避免错误,我们将反的取正,然后将它儿子的状态逆转过来,这样一定就是正确的了。说白了就是融合染色线段树的下穿和普通线段树RMQ的处理。

这题我交了N变,最开始完全就是脑残了,只记录最大值,忘了反转之后最小值还能变成最大值这码事~~导致我悲剧了一整天。

后来就是这个区间我想用统计反转次数的方法做,最终结果也是悲剧了,一旦中间有东西变了,就彻底完蛋。

后来,突发奇想用了XOR,才将这个问题解决……

P.s. XOR真是个神奇的运算啊…………

【代码】:

  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值