- Quiz
- AC
- 解説
- editorialと違う解法
- 範囲の長さは偶数だけ考えればいい
- ひっくり返した時、奇数番目と偶数番目がひっくり返るので、差し引きどれだけ得をするのか分かる
- 隣り合うマスでペアにして、kadane's algorithmで最大部分配列を求めれば、最高の得が求まる
- ペアの仕方は2パターンあるので両方試す
ll kadanes_algorithm(vector<ll> &A){
if(SZ(A)==0) return -1;
ll ans = A[0];
ll s = A[0];
FOR(i, 1, A.size()){
s = max(s + A[i], A[i]);
chmax(ans, s);
}
return ans;
}
void solve(){
ll N;
cin>>N;
VI A(N);
rep(i,N)cin>>A[i];
ll base = 0;
for(int i=0; i<N; i+=2){
base += A[i];
}
ll ma = base;
{
VI B;
rep(i,N/2){
ll a = A.at(2*i);
ll b = A.at(2*i+1);
B.push_back(b-a);
}
ll cand = base + kadanes_algorithm(B);
chmax(ma, cand);
}
{
ll M = N-1;
VI B;
rep(i,M/2){
ll a = A.at(2*i+1);
ll b = A.at(2*i+2);
B.push_back(a-b);
}
ll cand = base + kadanes_algorithm(B);
chmax(ma, cand);
}
p(ma);
}
int main(){
ll N;
cin>>N;
while(N--)solve();
return 0;
}