线性做法,不知道什么问题
#include<bits/stdc++.h>
using namespace std;
typedef long long i64;
const int mod=998244353;
const int N=2e6+5;
i64 n,k,t,a[N],lst[N],nxt[N],f[N];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n>>k;
t=n/k+(n%k!=0);
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=t;i++){
int l=(i-1)*k+1,r=i*k;
lst[l]=a[l];nxt[r]=a[r];
for(int j=l+1;j<=r;j++)lst[j]=max(lst[j-1],a[j]);
for(int j=r-1;j>=l;j--)nxt[j]=max(nxt[j+1],a[j]);
}
for(int i=1;i<=k;i++)f[i]=lst[i];
for(int i=2;i<=t;i++){
int l=(i-1)*k+1,r=i*k;
for(int j=r;j>=l;j--)f[j]=f[j-k]+max(lst[j],nxt[j-k+1]);
}
for(int i=t*k-1;i>=n;i--)f[i]=max(f[i],f[i+1]);
cout<<f[n];
}