题目大意:求出一个数列的所有连续子序列中不相同数的和的和。
题目思路:求出数列中每个数字应出现的次数。
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<queue> #include<vector> #include<iostream> #include<math.h> #include<algorithm> #define LL long long #define INF 0x3f3f3f #define MAXSIZE 1000005 using namespace std; LL a[MAXSIZE],sum[MAXSIZE]; int vis[MAXSIZE]; int main() { int T,n; LL ans; scanf("%d",&T); while(T--) { memset(vis,0,sizeof(vis)); memset(sum,0,sizeof(sum)); ans=0; scanf("%d",&n); for(int i=1; i<=n; i++) scanf("%lld",&a[i]); for(int i=1; i<=n; i++) { LL temp=(n+1-i)*a[i]; ans+=temp; ans+=(i-vis[a[i]]-1)*temp; vis[a[i]]=i; } printf("%lld ",ans); } return 0; }