wwsz_cn @ 2020-01-07 16:41:30
#include<bits/stdc++.h>
using namespace std;
struct node
{
int x,y,d;
};
int r,c;
int m[101][101];
queue<node> dl;
int fx1[4]={1,-1,0,0};
int fx2[4]={0,0,1,-1};
bool walk[101][101];
void read(int &a)
{
a=0;int d=1;char c;
while(c=getchar(),c<'0'||c>'9')if(c=='-')d=-1;a=a*10+c-48;
while(c=getchar(),c>='0'&&c<='9')a=a*10+c-48;
a*=d;
return ;
}
void write(int x)
{
if(x<0){x=-x;putchar(45);}
if(x)write(x/10);
else return;
putchar(x%10+48);
return;
}
void clear()
{
queue<node> empty;
swap(dl,empty);
return;
}
int maxn=-1;
void bfs(int x,int y)
{
dl.push((node){x,y,1});
while(!dl.empty())
{
node a=dl.front();
dl.pop();
int f=0;
for(int i=0;i<4;i++)
{
int nx=a.x+fx1[i],ny=a.y+fx2[i];
if(nx>=1&&nx<=r&&ny>=1&&ny<=c&&m[nx][ny]<m[a.x][a.y])
dl.push((node){nx,ny,a.d+1}),walk[nx][ny]=1;
else f++;
}
if(f==4)
maxn=max(maxn,a.d);
}
}
int main()
{
read(r),read(c);
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++)
read(m[i][j]);
for(int i=r;i>=1;i--)
for(int j=c;j>=1;j--)
if(!walk[i][j])
clear(),bfs(i,j);
write(maxn);
return 0;
}