题意:找出两个长度为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; }