解决此问题的最佳方法是什么?

时间:2019-02-15 11:02:50

标签: algorithm data-structures segment-tree fenwick-tree

我在一个在线编码竞赛中看到了这个编码问题,但是找不到最佳解决方案。 这是问题:
“给您一个由N个整数和Q个查询组成的数组A。每个查询的类型如下:
1 pos val:将索引pos处的元素更新为val
2 pos:找到小于或等于pos的最小索引i,以使i和pos之间的所有元素都相同。”

我以某种方式相信我们可以使用段树,但是我无法弄清楚段树的每个索引将代表什么。

1 个答案:

答案 0 :(得分:0)

这里的O(N + Q log ^ 2 N)方法:

  1. 为给定数组构建一个细分树
  2. 在每个分段树节点中,存储最小间隔数和最大间隔数
  3. 现在可以通过对segmenent树进行简单更新来完成类型1的查询
  4. 对于类型2的查询,我们可以使用二进制搜索来找到最小值i,以使range [i,pos]中的最小值等于相同范围中的最大值