给定一个长度为n的数列{a1,a2,a3,…,an},构建一种数据结构,使得以下操作可以在poly-logn时间内完成。
1. Reverse(i,j):
反转区间i到j中所有元素,如下所示: 原始序列: <… a[i-1], a[i], a[i+1], …, a[j-1], a[j], a[j+1], …> 交换后的序列: <… a[i-1], a[j], a[j-1], …, a[i+1], a[i], a[j+1], …> 2. Report(i):
报告第i个元素在序列中的位置,即a[i]。
这里,poly-logn指log n的某个幂次,如log(n)·log(n)可能是可接受的。
[注:感谢Baswana教授提出此问题。]
1. Reverse(i,j):
反转区间i到j中所有元素,如下所示: 原始序列: <… a[i-1], a[i], a[i+1], …, a[j-1], a[j], a[j+1], …> 交换后的序列: <… a[i-1], a[j], a[j-1], …, a[i+1], a[i], a[j+1], …> 2. Report(i):
报告第i个元素在序列中的位置,即a[i]。
这里,poly-logn指log n的某个幂次,如log(n)·log(n)可能是可接受的。
[注:感谢Baswana教授提出此问题。]
polylog(n) ~~ log(n)**k for some k
。 - Matthieu M.