思路:
首先(O(n^{2}))的暴力不难想。
题目中有个条件是(a[i]<=2*n)
也就是说(a[i]*a[j]<=2*n)
这样第二层循环的范围就有所缩小
最坏情况下第二层会跑(2*n*(1+1/2+1/3+……+1/n))
即(O(nlogn))
最后要记得开(long long)
代码:
const int maxn=2e5+100;
ll n,a[maxn],b[maxn];
int main(){
int _=read;
while(_--){
n=read;
rep(i,1,n) a[i]=read,b[a[i]]=i;
sort(a+1,a+1+n);
ll res=0;
rep(i,1,n)
for(ll j=i+1;j<=n&&a[i]*a[j]<=2*n;j++)
if(a[i]*a[j]==b[a[i]]+b[a[j]]) res++;
cout<<res<<endl;
}
return 0;
}