首先便输入边把数组前缀和求出,再根据要求遍历数组找到第一个最大的差值区间,在以他为起点向后k长度查找第二个差值区间的和; 源码:#include<bits/stdc++.h> using namespace std; const int N=2e6; using ll=long long; ll a[N],prefix[N]; ll p=LLONG_MIN; int main() { int t,n,k; cin>>t; while(t>0) { t--; cin>>n>>k; for(int i=1;i<=n;i++) { cin>>a[i]; prefix[i]=prefix[i-1]+a[i]; } ll mx1=p,mx2=p; for(int i=k;i<=n-k;i++) { mx1=max(mx1,prefix[i]-prefix[i-k]); mx2=max(mx2,mx1+prefix[i+k]-prefix[i]); } cout<<mx2<<endl; } return 0; }