P2757 [国家集训队] 等差子序列
题目大意
问你是否存在一个长度大于等于 \(3\) 的子序列为等差数列,注意原数列是一个 \(n\) 的排列。
\(1 \le n \le 5 \times 10^5\)。
题目思路
既然是长度大于等于 \(3\),那么不如就直接等于 \(3\) 去做。
考虑一个数 \(a_i\),它要作为这个等差数列的中项,一定是要有一个 \(a_i - v\) 在 \(i\) 的左边,\(a_i + v\) 在 \(i\) 的右边,才能够组成形如 \(a_i - v, a_i, a_i + v\) 的等差数列,那么也就是说,如果所有的 \(a_i - v, a_i + v\) 都在 \(i\) 的左边或者都在右边,那么就不存在以 \(a_i\) 为中项的等差数列,那么我们在值域上把 \(i\) 左边的数标 \(1\),那么不存在以 \(a_i\) 为中项的等差数列的情况当且仅当在值域上 以 \(a_i\) 为中心回文。
然后对于每个 \(a_i\) 都判断一下,就做完了,具体来说可以用线段树维护是否回文,维护一个哈希值。

浙公网安备 33010602011771号