1
已解决
3
已采纳
樊澄宇
新手光能
新手光能
首先,用一棵二叉树来描述这个序列:
树的叶子节点代表序列的每个数,其它节点来代表一段序列,根节点代表整个序列
对于每一个非叶节点,它的左子树表示左半边序列,它的右子树表示右半边序列
每个节点都有一个布尔值,表示这个节点是否要取反
比如一个长度是10的序列:
查询操作:从对应的叶子开始,往根节点走,沿路每碰到一次取反就取,最后值就是结果
取反操作:如果要取反的序列与某节点重合,则直接改那个节点;
如果完全不在节点范围里,就直接退出
否则递归遍历左子树和右子树
可以证明,两种操作都是logn,不会超时
0
0
0
0
0
0