【题目大意】:
跟QTREE一样,就是多了一个NEGATE操作,表示将A,B路径上的边权取负。
【题目分析】:
不要小看了这个取反,折腾了我将近一周……
问题在于取反了之后要怎么考虑新加进来的(就是改的边)。
解决方案不消说在线段树,他不是单纯的染色,所以我们为了让它保证正确性,就要牺牲下速度。
现在考虑我如果保证在进行完一个操作后,状态为反的区间为0个,要怎么办呢。我们记录一个flag,表示这个区间的max和min是在正的情况下还是在反得情况下。每次操作之前,为了避免错误,我们将反的取正,然后将它儿子的状态逆转过来,这样一定就是正确的了。说白了就是融合染色线段树的下穿和普通线段树RMQ的处理。
这题我交了N变,最开始完全就是脑残了,只记录最大值,忘了反转之后最小值还能变成最大值这码事~~导致我悲剧了一整天。
后来就是这个区间我想用统计反转次数的方法做,最终结果也是悲剧了,一旦中间有东西变了,就彻底完蛋。
后来,突发奇想用了XOR,才将这个问题解决……
P.s. XOR真是个神奇的运算啊…………
【代码】: