题目大意
给出一个1~n的排列A,问是否存在长度为3的等差子序列(子序列中元素不一定相邻)。
n<=300000
时间限制 1s
空间限制 256M
做法
从前往后加入A[i],如果不存在由A[i]+k、A[i]-k形成的等差子序列,那么在题目给出的排列中,A[i]+k、A[i]-k要么都在A[i]前面,要么都在A[i]后面。
这时候为了快速地得出k为所有合法值时的情况,我们可以用一个01串表示1~n中那些数出现了,再用hash将它转化成一个数。
如何快速地修改01串、得到hash值呢?用树状数组维护就可以了。
Tips:用线段树会MLE。