为什么加一个unique就过了?求解释
这是过了的
#include <bits/stdc++.h>
#define int long long
using namespace std ;
const int N = 1e6 + 10 , M = 2e6 + 10 ;
int a[N] , n , T , max1[M] ;
bool vis[M] ;
signed main()
{
cin.tie(0) ;
ios::sync_with_stdio(false) ;
cin >> T ;
while(T -- )
{
int maxn = 0 ;
int sum = 0 ;
memset(vis , 0 , sizeof vis) ;
cin >> n ;
for(int i = 1 ; i <= n ; i ++ ) cin >> a[i] ;
memset(max1 , -0x3f , sizeof max1) ;
for(int i = 1 ; i <= n ; i ++ ) if(a[i] == a[i-1]) sum += a[i] ;
n = unique(a + 1 , a + 1 + n) - a - 1;
for(int i = 1 ; i <= n ; i ++ )
{
max1[a[i-1]] = max(max1[a[i-1]] , maxn) ;
max1[a[i-1]] = max(max1[a[i-1]] , a[i] + max1[a[i]]) ;
maxn = max(maxn , max1[a[i-1]]);
}
cout << maxn + sum << endl ;
}
return 0 ;
}
这是没过的
#include <bits/stdc++.h>
#define int long long
using namespace std ;
const int N = 1e6 + 10 , M = 2e6 + 10 ;
int a[N] , n , T , max1[M] ;
bool vis[M] ;
signed main()
{
cin.tie(0) ;
ios::sync_with_stdio(false) ;
cin >> T ;
while(T -- )
{
int maxn = 0 ;
int sum = 0 ;
memset(vis , 0 , sizeof vis) ;
memset(max1 , 0 , sizeof max1) ;
cin >> n ;
for(int i = 1 ; i <= n ; i ++ ) cin >> a[i] ;
memset(max1 , -0x3f , sizeof max1) ;
for(int i = 1 ; i <= n ; i ++ )
{
if(a[i] == a[i-1]) sum += a[i] ;
max1[a[i-1]] = max(max1[a[i-1]] , maxn) ;
max1[a[i-1]] = max(max1[a[i-1]] , a[i] + max1[a[i]]) ;
maxn = max(maxn , max1[a[i-1]]);
}
cout << maxn + sum << endl ;
}
return 0 ;
}