问题标题: 1558 01修改怎么写?

1
1

3
已采纳
樊澄宇
樊澄宇
新手光能
新手光能

首先,用一棵二叉树来描述这个序列:

树的叶子节点代表序列的每个数,其它节点来代表一段序列,根节点代表整个序列

对于每一个非叶节点,它的左子树表示左半边序列,它的右子树表示右半边序列

每个节点都有一个布尔值,表示这个节点是否要取反

比如一个长度是10的序列:

查询操作:从对应的叶子开始,往根节点走,沿路每碰到一次取反就取,最后值就是结果

取反操作:如果要取反的序列与某节点重合,则直接改那个节点;

         如果完全不在节点范围里,就直接退出

         否则递归遍历左子树和右子树

可以证明,两种操作都是logn,不会超时

0
0
0
0
0
0
我要回答