题意:找出两个长度为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;
}
京公网安备 11010502036488号