ccioc @ 2023-12-08 10:24:55
#include<stdio.h>
#include<algorithm>
using namespace std;
int dp[10020];
int a[10020];
bool cmp(int x,int y){
if(a[x]<a[y])
return true;
return false;
}
int main(){
int r,c;
int i;
int s[10005];
scanf("%d %d",&r,&c);
for(i=1;i<=r*c;i++){
s[i]=i;
scanf("%d",&a[i]);
}
int len=r*c;
sort(s+1,s+len+1,cmp);
for(int i=1;i<=len;i++){
dp[s[i]]=1;
if((s[i]-c)>0&&a[s[i]-c]<a[s[i]])
dp[s[i]]=max(dp[s[i]],dp[s[i]-c]+1);
if((s[i]-1)>0&&a[s[i]-1]<a[s[i]])
dp[s[i]]=max(dp[s[i]],dp[s[i]-1]+1);
if((s[i])%c&&a[s[i]+1]<a[s[i]])
dp[s[i]]=max(dp[s[i]],dp[s[i]+1]+1);
if((s[i]+c)<=len&&a[s[i]]>a[s[i]+c])
dp[s[i]]=max(dp[s[i]],dp[s[i]+c]+1);
}
int max=dp[1];
for(i=1;i<=len;i++)
if(max<dp[i])
max=dp[i];
printf("%d",max);
}