题目解析
数据结构(平方分割,等);
编写程序计算,10510^5105 内变为 111,需要操作次数最多的数为 770317703177031,经过 350350350 次操作后变为 111。这意味着,数组中的每个元素最多经过 350350350 次操作后,后续的操作对其失效。
我们考虑将数组分割为 N\sqrt{N}N 个部分,对于每个块,我们维护一个容器,存储块内不为 111 的元素的下标,另外维护一个变量维护块内为 111 的元素数量。每次修改操作,[L,R][L, R][L,R]:
1. 对于未整体出现在同一个块内的元素,暴力更新。
2. 对于整体出现在同一个块内的元素,只修改块内不为 111 的元素,同时将修改后所有的变为 111 的元素下标,从块内容器中删除,同时令块内为 111 的元素数量增加。
由于每个元素最多被修改 350350350 次后,变为 111,上述操作,第一部分时间复杂度为 O(N)\mathrm{O}(\sqrt{N})O(N ),第二部分同样为 O(N)\mathrm{O}(\sqrt{{N}})O(N )。
对于每个查询 [L,R][L, R][L,R],也分为两个部分:
1. 对于未整体出现在同一个块内的元素,暴力统计。
2. 对于整体出现在同一个块内的元素,查询块内维护的块内为 111 的元素数量。
两部分操作时间复杂度皆为 O(NN)\mathrm{O}(N\sqrt{N})O(NN )。
AC代码