Educational Codeforces Round 90 (Rated for Div. 2) D. Maximum Sum on Even Positions (1600)

    技术2022-07-11  86

    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; }
    Processed: 0.011, SQL: 9