首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >元素数组上的多个查询更新

元素数组上的多个查询更新
EN

Stack Overflow用户
提问于 2019-09-15 13:09:46
回答 1查看 62关注 0票数 1

我有一个不一定要排序的数组。我必须对它执行Q查询。查询如下:给定数组和索引I,我必须更新该数组中从索引i+1到n的所有元素,以便AI>Aj。查询是相互依赖的,即对查询1的更改将反映在查询2中。

对每个查询所做的更改如下:

代码语言:javascript
复制
for j=I+1 to N:
    if A[j]<A[I]:
      A[j]=0

我不知道如何处理这个问题。我在想一些类似二元索引树的东西。但我不确定。在提示中,它说要使用高级排序算法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-15 14:07:11

以下是O((q+n) log n)方法:

  1. 为给定数组的范围最小查询构建段树
  2. 还创建一个数组marked[]来跟踪应该变为零的节点。
  3. 现在,对于每个查询:如果给定索引i被标记,什么也不做(您没有为元素设置约束,所以我假设所有的Ai >=0)
  4. 如果没有标记,我们可以在区间I+1,n中找到一些索引j,使得Aj是这个区间中的最小值。
  5. 如果这样的Aj是>= Ai,我们就不需要查询了。
  6. 否则:
    • mark索引j,(标记j= true)
    • 将段树设置位置j更新为某个大值(无穷大)
    • 从步骤4继续执行步骤,直到查询完成。

这似乎很慢,因为对于每个查询,我们可能在段树中进行n次更新,但是我们可以注意到,每个元素最多只能标记一次,所以最糟糕的情况是O((q+n) log n)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57944414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档