Wrong Answer。
#include<cstdio>
#include<algorithm>
int n,k;
int a[3003][3003],f[3003][3003];
int H,T,q[3003];
int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)for(int j=1;j<=i;j++) scanf("%d",&a[i][j]),f[i][j]=a[i][j];
int mk=std::__lg(k);
for(int K=1;K<=mk;++K){
for(int i=1,mi=n-(1<<K)+1,mj=1<<(K-1);i<=mi;i++){
H=1,T=0;
for(int j=1;j<=mj;q[++T]=j++)for(;H<=T && f[i+mj][q[T]]<f[i+mj][j];--T);
for(int j=1;j<=i;j++){
for(;H<=T && f[i+mj][q[T]]<f[i+mj][j+mj];--T);
for(;H<=T && q[H]<j;++H);
q[++T]=j+mj,f[i][j]=std::max(f[i][j],f[i+mj][q[H]]);
}
}
}
long long ans=0;
if(k==(1<<mk))for(int i=1,mi=n-k+1;i<=mi;i++)for(int j=1;j<=i;j++)ans+=f[i][j];
else{
for(int i=1,mi=n-k+1,mj=k-(1<<mk);i<=mi;i++){
H=1,T=0;
for(int j=1;k<=mj;q[++T]=j++)for(;H<=T && f[i+mj][q[T]]<f[i+mj][j];--T);
for(int j=1;j<=i;j++){
for(;H<=T && f[i-mj][q[T]]<f[i+mj][j+mj];--T);
for(;H<=T && q[H]<j;++H);
q[++T]=j+mj,ans+=std::max(f[i][j],f[i+mj][q[H]]);
}
}
}
printf("%lld\n",ans);
return 0;
}