标签:
5 1 2 3 4 5
23
#include<iostream> #include<algorithm> #include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> using namespace std; int L[100100],R[100010]; int n; int a[100010]; int visit[100100]; void updatalr() { memset(visit,0,sizeof(visit)); for(int i=1;i<=n;i++) { int maxx = 0; int t = sqrt(a[i]); for(int j=t;j>=1;j--) { if(a[i]%j == 0) { maxx = max(maxx,visit[j]); maxx = max(maxx,visit[a[i]/j]); } } L[i] = maxx; visit[a[i]] = i; } for(int i=0;i<100001;i++) { visit[i] = n + 1; } for(int i=n;i>=1;i--) { int minn = n+1; int t = sqrt(a[i]); for(int j=t;j>=1;j--) { if(a[i]%j == 0) { minn = min(minn,visit[j]); minn = min(minn,visit[a[i]/j]); } } R[i] = minn; visit[a[i]] = i; } } int main() { while(scanf("%d",&n)!=EOF) { __int64 sum = 0; memset(visit,0,sizeof(visit)); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } updatalr(); for(int i=1;i<=n;i++) { __int64 LL = (__int64)(i - L[i]); __int64 RR = (__int64)(R[i] - i); sum = (sum + (LL*RR))%1000000007; } printf("%I64d\n",sum); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
HDU 5288 OO’s Sequence(多校第一场1001)
标签:
原文地址:http://blog.csdn.net/yeguxin/article/details/46998903