无法解决密码保护问题

问题描述

| (O(n),O(log n))方法是否足以解决问题-http://www.codechef.com/problems/MULTQ3/? (更新时间-O(n),查询时间-O(log n)) 我的解决方案-使用上述方法(使用分段树)解决,由Codechef法官裁定为“'TLE \”提交。 好吧,我什至尝试了一种(O(log n),O(n))的方法解决这个问题(更新时间-O(log n),查询时间-O(n)),但即使这样,Codechef法官还是拒绝了超过时间限制。到目前为止,我不知道该从哪里去。这是我第二次提交的链接-http://www.codechef.com/viewsolution/558614 请已经解决问题的任何人帮助我。 我可以做到(O(lgn)-O(lgn))吗?怎么样? 提前致谢。     

解决方法

        确实可以使它为“ 0”。 诀窍是要有一个由数据结构表示的树,并在每个节点上具有以下信息: 起始索引 结束索引 左节点 右节点 多少个0 mod(3) 多少个1 mod(3) 多少2 mod(3) 未应用的更新量 当要求您应用更新时,只需要将其(以及未应用的数量)应用到边界在该范围内的节点。否则,只需增加未应用的更新量即可。如果需要,您会懒惰地应用它。 当查询范围时,您可以懒惰地应用未应用的更新量并从正确的存储桶中获取数据,除非所讨论的范围在树的该部分的索引范围之内。然后,直到那时,您才需要将未应用的更新量降低到内部节点中。 两种操作都仅钻入边界上树的一部分,因此均为
O(log(n))
。