D. Maximum Sum on Even Positions
题意:
给一个数组,规定最多只能翻转一次该数组的子串,问最后能得到的下标是偶数的元素的值的和最大是多少
思路:
你问我怎么办?我只能说是暴力,写两个前缀和就完事儿
代码附:
#pragma GCC optimize("Ofast","inline","-ffast-math")
#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e5+10;
int a[N],pre1[N],pre2[N];
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int t,n;
cin>>t;
while(t--)
{
cin>>n;
int sum=0,cz=0;
for(int i=0; i<n; ++i)
{
cin>>a[i];
if(i%2==0)
sum+=a[i];
}
for(int i=0; i<n; i+=2)
{
pre1[i+2]=pre1[i]-a[i]+a[i-1];
cz=max(cz,pre1[i+2]);
if(pre1[i+2]<0)
pre1[i+2]=0;
}
for(int i=1; i<n; i+=2)
{
pre2[i+2]=pre2[i]+a[i]-a[i-1];
cz=max(cz,pre2[i+2]);
if(pre2[i+2]<0)
pre2[i+2]=0;
}
sum+=max(cz,(int)0);
cout<<sum<<endl;
}
return 0;
}