题目描述
给定一个长度为
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 的时间复杂度。