这是我最近在接受采访时被问到的一个问题。我提出了一个不错的解决方案,但我的采访者告诉我有一个更好的解决方案。
想象一下,有n个灯泡(或者你选择的任何二进制物......),最初它们全都关闭了。设计一种方法来回答理想时间和空间复杂度两个问题:
(1)IsOn(i) - 如果元素'i'在
上,则返回true(2)Toggle(i,j) - 改变[i,j](包括)范围内所有元素的状态。
有人告诉我,我应该找到一个更好的解决方案,一个与存储元素的范围有关的解决方案 - 但我很难理解它。
答案 0 :(得分:1)
这可以通过具有延迟传播的分段树来完成。算法如下
构建树的时间复杂度O(nlogn)和查询和更新的O(logn)