Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Q查询后的输出数组将某些元素设置为零_Java_Arrays_Algorithm_Data Structures - Fatal编程技术网

Java Q查询后的输出数组将某些元素设置为零

Java Q查询后的输出数组将某些元素设置为零,java,arrays,algorithm,data-structures,Java,Arrays,Algorithm,Data Structures,Q查询是在由N个元素组成的数组上执行的。在每个查询中,选择索引I并执行以下操作 for j = I + 1 to N: if A[j] < A[I]: A[j] = 0 对于j=I+1到N: 如果A[j]A[I]时解决了这个问题(见下文),这似乎更有趣:) 为了解决A[j]

Q查询是在由N个元素组成的数组上执行的。在每个查询中,选择索引I并执行以下操作

for j = I + 1 to N:
  if A[j] < A[I]:
    A[j] = 0
对于j=I+1到N:
如果A[j]
数组A在处理Q查询后是什么样子的

1 <= N,Q <= 10^5
1 <= A <= 10^9

Test Case :

5 2 (N Q)  
4 3 4 3 2
3 2 (Q queries) 
solution : 4 3 4 0 0

3 1 (N Q)
3 2 1
2
solution : 3 2 1

1我首先误读了这个问题,并在
A[j]>A[I]
时解决了这个问题(见下文),这似乎更有趣:)

为了解决
A[j]
的问题,对于每个元素,我们想知道在将其设置为零之前,左侧是否有更大的元素被查询。惊喜如果在查询之前将其变为零,则表示在左侧查询了更大的元素

我们可以在
O(n)
时间和
O(| Q |)
空间中解决这个问题(假设我们使用输入空间作为输出)。将查询索引放入
O(1)
lookup的集合中。从左向右遍历并维护最大查询元素的单个变量(起始值为0)。如果当前元素小于所看到的最大元素,则在输出中将其标记为零。如果元素被查询且大于
所查询的最大元素
,则更新
所查询的最大元素

4 3 4 3 2
Queries 3 2

4   largest_queried 0
3   largest_queried 0
4   largest_queried 4
3   < 4 so set to 0 (largest_queried stays the same)
2   < 4 so set to 0
432
问题3 2
4最大值0
3最大值0
4最大的问题4
3<4,因此设置为0(查询的最大值保持不变)
2<4,因此设置为0
A[j]>A[i]
我们可以在
O(nlogn)
时间和
O(n)
空间中解决这个问题。假设所有非负元素,对于每个数组元素,我们想知道(1)左侧是否有任何较低的元素被查询,或者(2)给定查询顺序作为时间,在某个时间
t
设置为零后,左侧是否有任何相等或较高的元素被查询

沿着查询列表或映射从左到右遍历数组,附加时间标志表示查询顺序(例如,
[(1,2)、(2,0)]
表示索引1在时间2查询,索引2在时间0查询)

维护一个到目前为止被查询的元素树,按其值排序,并用左子树中显示的最短时间进行修饰。如果相同的查询值在较早的时间出现,请更新时间


对于每个元素,在查询的元素树中查找值较低的最近节点。如果存在,则在输出中将元素标记为0。如果元素也被查询过,并且时间晚于我们在树中找到的相应时间装饰,则将值0随查询时间一起插入到查询元素树中(或者,如果0已在树中且时间较晚,则只更新时间装饰)。

似乎查询的顺序不会影响结果,所以问题变成了寻找最有效的订单。你能分享一个问题的链接吗?到目前为止你做了哪些尝试/研究?分享您的发现。提示:前缀数组:)@MrSmith42我尝试了暴力方法,无法找到有效的解决方案。我们应该对查询进行排序吗?@seanzig关于A[j]