题意 给定一个长度为n的序列 选择两段长度为k的子序列和的最大值
有一个类似的题目,是选择两个点,思路是遍历,记录下过程中的最大值,答案便是最大值加上当前的数的最大值
这题也类似,遍历过程中记录长度为k的最大值,答案是最大值加上当前区间取最大值
重点是两段不能相交

#include<iostream>
using namespace std;
int t,n,a[200010],k;
int main()
{
    cin>>t;
    while(t--)
    {
        long long a[200010]={0},ans=-1e18,maxx=-1e18;
        cin>>n>>k;
        for(int i=1;i<=n;i++)cin>>a[i],a[i]+=a[i-1];
        for(int i=k,j=i+1;j+k-1<=n;i++,j++)
        {
            maxx=max(maxx,a[i]-a[i-k]);
            ans=max(ans,maxx+a[j+k-1]-a[j-1]);
        }
        cout<<ans<<endl;
    }
}