Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
60356 | zengjilin | J3 | C++ | 运行出错 | 0 | 1994 MS | 3192 KB | 985 | 2022-10-15 11:27:45 |
#include<bits/stdc++.h> using namespace std; int n,a[500005],x,y,xx=0; int p[2005],p1[2005],Maxn=0; bool q=false; long long ans=0,Max=1000000007; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); Maxn=(Maxn,a[i]); p[a[i]]++; if(p[a[i]]>1) q=true; } if(q){ for(int i=1;i<=n;i++){ ans+=(a[i]*i*(n+1-i)); ans%=Max; } for(int i=1;i<=Maxn;i++){ if(p[i]==0||p[i]==1) continue; int k=0; for(int j=1;j<=n;j++){ if(i==a[j]) k++,p1[k]=j; } x=p1[2],y=p1[1]; if(k==2) ans-=((n-x+1)*y*i); else{ for(int j=2;j<=k;j++){ x=0,y=0; for(int m=1;m<=k-j+1;m++){ xx=y; y=p1[m],x=p1[m+j-1]; ans-=((n-x+1)*y*i); if(xx==0) continue; ans+=((n-x+1)*xx*i); } } } } } else{ for(int i=1;i<=n;i++){ ans+=(a[i]*i*(n+1-i)); ans%=Max; } } ans%=Max; printf("%lld\n",ans); return 0; }