题目描述
给定一个长度为n的序列
问有多少个三元组(i,j,k)满足,ai,aj,ak是等差数列。
n≤105,ai≤3×104
分析
考虑分块。
假如三个数都在当前块中,直接枚举并查找即可,O(nBB2)=O(nB)
假如只有两个数在当前块中,则分第三个数在左还是右,同样查找一下即可。O(nB)
假如有一个数在当前块中,则问题转化为从左边选一个右边选一个加起来等于枚举的ai,FFT即可。O(nBmlogm)
取B=n−−√就可以达到O(nn−−√+n−−√mlogm的时间复杂度。