Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
37574 | 22级廖思学 | 【S】T1 | C++ | 通过 | 100 | 264 MS | 3872 KB | 1299 | 2025-04-06 15:57:02 |
#include<bits/stdc++.h> using namespace std; #define int long long #define ls pos<<1 #define rs pos<<1|1 const int N=1e5+10,inf=1e15; int T,n,k,ans,a[N],s[N],t[N<<2]; void pushup(int pos){t[pos]=t[ls]+t[rs];} void build(int pos,int l,int r){ // cout<<pos<<" "<<l<<" "<<r<<endl; if(l==r){t[pos]=(a[l]>0?a[l]:0);return;} int mid=(l+r)>>1; build(ls,l,mid);build(rs,mid+1,r); pushup(pos); } int query(int pos,int l,int r,int ql,int qr){ if(ql>qr)return 0; if(l>=ql&&r<=qr)return t[pos]; int mid=(l+r)>>1,res=0; if(ql<=mid)res=query(ls,l,mid,ql,qr); if(qr>mid)res+=query(rs,mid+1,r,ql,qr); return res; } signed main(){ scanf("%lld",&T); while(T--){ ans=-inf; scanf("%lld%lld",&n,&k); for(int i=1;i<=n;i++){ scanf("%lld",&a[i]);s[i]=s[i-1]+a[i]; } build(1,1,n); for(int i=1;i+k-1<=n;i++){ int j=i+k-1; int res=max(s[j]-s[i-1],0ll)+query(1,1,n,1,i-1)+query(1,1,n,j+1,n); // cout<<1<<" "<<i-1<<" "<<query(1,1,n,1,i-1)<<endl; // for(int h=1;h<=n*2;h++)cout<<t[h]<<' ';cout<<endl; ans=max(ans,res); } printf("%lld\n",ans); } fclose(stdin);fclose(stdout); return 0; }