#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<vector>
#define int long long
inline int read() {
int x=0,f=1;char ch=getchar();
while(ch > '9' || ch < '0'){if(ch == '-'){f = -1;}ch = getchar();}
while(ch >= '0'&&ch <= '9'){x = x * 10 + ch - 48; ch = getchar();}
return x * f;
}
const int N = 2e5 + 10;
const int M = 1e6 + 10;
int n,T,a[N],s[N],dp[N][2],last_same[N],val[M];
signed main()
{
T = read();
while(T--){
memset(val,0,sizeof(val));
n = read();
for(int i = 1;i <= n;++i) {
a[i] = read();
last_same[i] = val[a[i]];
val[a[i]] = i;
}
for(int i = 1;i <= n;++i) s[i] = s[i - 1] + (a[i] == a[i + 1] ? a[i] : 0);
for(int i = 1;i <= n;++i) dp[i][1] = dp[i][0] = 0;
for(int i = 1;i <= n;++i){
if(a[i] != a[i - 1]){
dp[i][0] = std::max(std::max(dp[i - 1][0],dp[i - 1][1]),dp[last_same[i] + 1][1] + a[i] + s[i - 1] - s[last_same[i] + 1]);
dp[i][1] = std::max(std::max(dp[i - 1][0],dp[i - 1][1]),dp[last_same[i] + 1][0] + a[i] + s[i - 1] - s[last_same[i] + 1]);
}else{
dp[i][1] = std::max(std::max(dp[i - 1][0],dp[i - 1][1]),dp[i - 1][1] + a[i]);
dp[i][0] = std::max(std::max(dp[i - 1][0],dp[i - 1][1]),dp[i - 1][0] + a[i]);
}
}
std::cout << std::max(dp[n][0],dp[n][1]) << '\n';
}
return 0;
}
应该是正解思路,为什么样例都过不了,求大佬调试