萌新求助 WA #25 #39
查看原帖
萌新求助 WA #25 #39
756875
back_find生活在单调队列上楼主2024/12/8 23:30

线性做法,不知道什么问题

#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];
}
2024/12/8 23:30
加载中...