【问题标题】:Maximum k such that A[0]<A[k], A[1]<A[k+1], ..., A[k-1]<A[2*k-1], after sorting each k-sized window最大 k 使得 A[0]<A[k], A[1]<A[k+1], ..., A[k-1]<A[2*k-1],在对每个 k 排序之后大小的窗口
【发布时间】:2021-10-03 19:19:43
【问题描述】:

我需要有效的算法来解决这个问题(时间复杂度小于 O(n^2)),请帮助我:

a[i..j] 被称为 a[i..j] 给定数组 A[1..n], (n 的 k 的最大值

例如,n=10:2 2 1 4 3 2 5 4 2 3 答案是 4

很容易看出 k

而且我不知道如何处理 a[i]

【问题讨论】:

  • 我在编辑后恢复了答案。

标签: algorithm sorting search


【解决方案1】:

使用具有范围更新的 Fenwick 树。树中的每个索引表示窗口A 中有多少数字小于它的计数。要使窗口有效,B(右侧窗口)中的每个元素都必须在 A(左侧窗口)中有一个伙伴。当我们将数字x 移入A 时,我们将1 添加到树中的[x+1, 1000] 范围内。对于从 B 移动到 A 的元素,在其树索引中添加 1。对于B 中的每个新元素,将-1 添加到其在树中的索引中。如果索引低于零,则窗口无效。

例如,我们有:

2 2 1 4 3 2 5 4 2 3
2 2
 |
Tree:
add 1 to [3, 1000]
add -1 to 2
idx  1  2  3  4  5
val  0 -1  1  1  1 (invalid)


2 2 1 4 3 2 5 4 2 3
2 2 1 4
   |
Tree:
add 1 to [3, 1000]
add 1 to 2 (remove 2 from B)
add -1 to 1
add -1 to 4
idx  1  2  3  4  5
val -1  0  2  1  2 (invalid)


2 2 1 4 3 2 5 4 2 3
2 2 1 4 3 2
     |
Tree:
add 1 to [2, 1000]
add 1 to 1 (remove 1 from B)
add -1 to 3
add -1 to 2
idx  1  2  3  4  5
val  0  0  2  2  3 (valid)


2 2 1 4 3 2 5 4 2 3
2 2 1 4 3 2 5 4
       |
Tree:
add 1 to [5, 1000]
add 1 to 4 (remove 4 from B)
add -1 to 5
add -1 to 4
idx  1  2  3  4  5
val  0  0  2  2  3 (valid)


2 2 1 4 3 2 5 4 2 3
2 2 1 4 3 2 5 4 2 3
         |
Tree:
add 1 to [4, 1000]
add 1 to 3 (remove 3 from B)
add -1 to 2
add -1 to 3
idx  1  2  3  4  5
val  0 -1  2  3  4 (invalid)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 2018-09-16
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多