赛时瞎蒙碰到死耗子蒙了一个方程能过大样例,刚刚优化了一下预处理过了,但是我不知道为啥,求大佬指点
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1000005;
int n,T, a[N], lst[N], f[N], sum[N], ans;
signed main() {
cin >> T;
while(T--) {
cin >> n;
memset(a, 0, sizeof a);
memset(lst, 0, sizeof lst);
memset(f, 0, sizeof f);
memset(sum, 0, sizeof sum);
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 2; i <= n; i++) {
sum[i] = sum[i - 1];
if(a[i] == a[i - 1]) sum[i] += a[i];
}
for (int i = 1; i <= n; i++) {
if (lst[a[i]] == 0) {
lst[a[i]] = i;
f[i] = f[i - 1];
} else {
f[i] = max(f[i - 1], max(f[lst[a[i]] + 1], f[lst[a[i]]]) + a[i] + sum[i] - sum[lst[a[i]] + 1]);
lst[a[i]] = i;
}
}
cout << f[n] << endl;
}
return 0;
}