题意:找出两个长度为k的区间和最大。

题记:前缀和处理一下数组,然后枚举区间的右端点,mmax记录下第一个区间和的最大值,再取第二个区间和mmax的最大值即是答案。

#include<bits/stdc++.h>

using namespace std;
#define int long long
const int N=2e5+10;
int a[N];
signed main(){
    int T;
    cin>>T;
    while(T--){
        int n,k;
        cin>>n>>k;
        for(int i=1;i<=n;i++){
            cin>>a[i];
            a[i]=a[i-1]+a[i];
        }
        int mmax=-1e18,ans=-1e18;
        for(int i=k;i+k<=n;i++){
            mmax=max(mmax,a[i]-a[i-k]);
            ans=max(ans,mmax+a[i+k]-a[i]);
        }
        cout<<ans<<endl;
    }
    return 0;
}