#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int num[1100000];
int main()
{
int t;
cin >> t;
while (t--)
{
int n;
scanf("%d", &n);
long long ans = 0;
int k;
long long s = 0;
memset(num, 0, sizeof num);
for (int i = 1; i <= n; i++)
{
scanf("%d", &k);
s = s + k + (i - 1 - num[k])*k;
num[k] = i;
ans += s;
}
printf("%lld\n", ans);
}
}
ZOJ 3872 Beauty of Array
題目大意:將連續的子序列,這邊需要搞懂什麼是連續子序列,想了半天,
舉一個栗子:2 3 3,他連續子序列是(2),(3),(3),(2,3),(3,3),(2,3,3)。這樣子就懂了吧。
beauty summation 指的就是這個序列當中不重複的數的和。
這道題就是要求所有子序列的beauty summation的和。
方法:
從左直接掃。由於是連續,所以這個數除了自己一個之外,都要帶上前面的數。或者說這個數一定會跟在他前面數的所有集合當中。
利用這點,可以這麼想。設s表示前一個數所有集合的beauty summation。
現在多了一個數k,在k的前一個數與k相等的話,意味着有k出現的元素大於1個的集合,都會出現兩個以上的k,這時候新多的這個k就不能貢獻自己的作用。
具體看一下公式吧。感覺最近有點着急。。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.