# 单点更新:从下到上,最多到 size,可以取等 defupdate(self, index, val): self.tree[index] = val i = 1 while i < self.__lowbit(index): self.tree[index] = max(self.tree[index], self.tree[index - i]) i = i << 1
# 区间查询:从上到下,最少到 1,可以取等 defquery(self, l,r): res = self.a[r] if l == r: return self.a[r] while l <= r: res = max(res,self.a[r]) r -= 1 while r-l >= self.__lowbit(r): res = max(res, self.tree[r]) r -= self.__lowbit(r) return res