给一个序列,求 这个序列的连续子序列中不重复的元素 的和
不是找规律,这是一种数学的计数方法。
对于每个数字来说,这个数字和这个数字之前出现的位置之间的数字就可以认定为是新增的。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll;
const int maxn =100000+10;
int t;
int n;
int s[maxn];
int mark[maxn];
int main()
{
scanf("%d",&t);
while (t--)
{
memset(mark,0,sizeof(mark));
memset(s,0,sizeof(s));
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&s[i]);
}
ll sum=0;
ll ans=0;
for(int i=1;i<=n;i++)
{
sum+=(i-mark[s[i]])*s[i];
ans+=sum;
mark[s[i]]=i;
}
cout << ans <<endl;
}
return 0;
}