U523244 题解
zhujianheng · · 个人记录
注意到
时间复杂度
当然本题还有个
所以这题其实完全可以给
懂了,下次出个加强版,同样的题解。
标程:
#include<bits/stdc++.h>
using namespace std;
const int N=200009,V=1000009;
int a[N];
vector<int> G[V];
map<int,int> mp;
void init(int n){
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j+=i)
G[j].push_back(i);
}
int main(){
ios::sync_with_stdio(0);
int n,v=0;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
v=max(v,a[i]);
mp[a[i]]=i;
}
init(v);
long long ans=0;
for(int k=1;k<=n;k++)
for(int p=0;p<G[a[k]].size();p++){
int x=G[a[k]][p];
if(!mp[x]) continue;
if(!mp[a[k]/x]) continue;
if(mp[x]>mp[a[k]/x]||mp[a[k]/x]>k||mp[x]>k) continue;
ans++;
}
cout<<ans<<endl;
return 0;
}