rt,样例过了,但单调队列一直调不好
#include<iostream>
#include<cstdio>
#include<cstring>
#define N 4010
#define MOD 10000
using namespace std;
int n,k,a[N][N],q[N],m,t,maxx;
int f[N][N],u,w,v;
int main(){
scanf("%d%d%d%d",&n,&m,&k,&t);
for(int i=1;i<=k;i++){
scanf("%d%d%d",&u,&v,&w);
a[u][v]=w;
}
for(int i=1;i<=m;i++){
f[1][i]=a[1][i];
}
for(int i=2;i<=n;i++){
int h=1,t=0,r=0;
for(int j=1;j<=m;j++){
while(r<m&&r<j+t){
r++;
while(h<=t&&f[i-1][q[t]]<=f[i-1][r])t--;
q[++t]=r;
}
while(h<=t&&q[h]<j-t)++h;
f[i][j]=(h<=t?f[i-1][q[h]]:0)+a[i][j];
}
}
for(int i=1;i<=m;i++){
maxx=max(maxx,f[n][i]);
}
printf("%d",maxx);
return 0;
}