#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
const int maxn=2e3+10;
int n,m;
int a[maxn][maxn];
int mx=0,mn=1e18;
void RX()
{
for(int i=0;i<n/2;i++)
{
for(int j=0;j<m;j++)
{
swap(a[i][j],a[n-i-1][j]);
}
}
}
void RY()
{
for(int i=0;i<n;i++)
{
for(int j=0;j<m/2;j++)
{
swap(a[i][j],a[i][m-j-1]);
}
}
}
bool check(int k)
{
int kolona=-1;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(mx-a[i][j]>k)
{
kolona=max(kolona,j);
}
}
for(int j=0;j<=kolona;j++)
{
if(a[i][j]-mn>k)
{
return false;
}
}
}
return true;
}
int f()
{
int l=0;
int r=1e9;
while(l<r)
{
int mid=(l+r)/2;
if(check(mid))
{
r=mid;
}
else
{
l=mid+1;
}
}
return r;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cin>>n>>m;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>a[i][j];
mx=max(mx,a[i][j]);
mn=min(mn,a[i][j]);
}
}
int ans=f();
RX();
ans=min(ans,f());
RY();
ans=min(ans,f());
RX();
ans=min(ans,f());
cout<<ans<<endl;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |