树状数组动态维护 $hash$ 值.
只需要判断是否存在长度为 $3$ 的等差子序列,即满足 $1\le i<k<j\le n,2a_k=a_i+a_j$ 的三元组 $(i,j,k)$ .
考虑从前往后枚举 $k$ ,记录一个 $vis$ 数组表示各个数当前是否出现过.
只需要检查 $a_k$ 两侧的字符串是否对称 (一侧超出的长度不计) ,若对称,说明不存在合法的 $(i,j,k)$ ,否则存在.
因为给出的序列是从 $1$ 到 $n$ 的一个排列,如果一个数 $x$ 当前没有出现,则一定会在之后出现,正确性就显然了.
用树状数组动态维护 $vis$ 正串与反串的 $hash$ 值,时间复杂度 $O(T\cdot n\log n)$ .
1 |
|