等差数列?再见!
传送门
题解
对于一个三元组$A_i,A_j,A_k(i<j<k)$,如果它们构成等差数列,当且仅当有$A_k-A_j=A_j-A_i$。
考虑枚举中间的$j$,如果再枚举一个数$x$,如果$x$与$A_$存在并且在原排列中$A_j$的不同侧,那么就构成了一个等差的子序列。
所以可以再维护一个01序列,第$i$位上为0表示数字$i$在原序列中的位置小于$j$,否则大于$j$。
如果原序列中不存在三元等差数列,那么这个01序列应该是以$A_j$为中心左右对称的(可能有一端会多出来一截,忽略即可)。
每次$j$变化时,01序列上只有一个位置发生了变化,线段树维护一个正反的哈希值即可。
代码
1 |
|