#include<bits/stdc++.h>
using namespace std;
int a[5010][210],st[5010][210],top[210];
long long ans,sum[5010],f[5010],ths[5010];
int main()
{
int n,m;scanf("%d%d",&n,&m);
for (int i=2;i<=n;i++){int w;scanf("%d",&w);sum[i]=sum[i-1]+w;}
for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) scanf("%d",&a[i][j]);
for (int i=1;i<=n;i++)
{
for (int i=1;i<=n;i++) ths[i]=0;
for (int j=1;j<=m;j++)
{
for (;top[j]&&a[i][j]>=a[st[top[j]][j]][j];top[j]--)
{
ths[st[top[j]-1][j]+1]+=a[i][j]-a[st[top[j]][j]][j];
ths[st[top[j]][j]+1]-=a[i][j]-a[st[top[j]][j]][j];
}
ths[i]+=a[i][j];st[++top[j]][j]=i;
}
for (int j=1;j<=i;j++)
{
ths[j]+=ths[j-1];f[j]+=ths[j];
ans=max(ans,f[j]-sum[i]+sum[j]);
}
}
printf("%lld\n",ans);
}
./Main.cpp: In function ‘int main()’:
./Main.cpp:7:29: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
int n,m;scanf("%d%d",&n,&m);
^
./Main.cpp:8:45: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
for (int i=2;i<=n;i++){int w;scanf("%d",&w);sum[i]=sum[i-1]+w;}
^
./Main.cpp:9:68: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) scanf("%d",&a[i][j]);
^