#include <bits/stdc++.h>
using namespace std;
int n,m,a[505][505],l[505][505],r[505][505],dx[4]={1,-1,0,0},dy[4]={0,0,1,-1},s,p,q,i,j;
bool b[505][505];
void dfs(int x,int y)
{
int k,u,v;
b[x][y]=1;
s--;
for (k=0;k<4;k++)
{
u=x+dx[k];
v=y+dy[k];
if (!b[u][v] && (u>=1 && u<=n) && (v>=1 && v<=m) && (a[u][v]<a[x][y]))
{
dfs(u,v);
l[x][y]=min(l[x][y],l[u][v]);
r[x][y]=max(r[x][y],r[u][v]);
}
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin>>n>>m;
for (i=1;i<=n;i++)
{
for (j=1;j<=m;j++)
{
cin>>a[i][j];
}
}
s=n*m;
memset(l,0x3f,sizeof(l));
for (i=1;i<=m;i++)
{
l[n][i]=i;
r[n][i]=i;
}
for (i=1;i<=m;i++)
{
if (!b[1][i]) dfs(1,i);
}
if (s)
{
cout<<0<<endl<<s<<endl;
return 0;
}
p=1;
while (p<=m)
{
q=0;
for (i=1;i<=m;i++)
{
if (l[1][i]<=p) q=max(q,r[1][i]);
}
s++;
p=q+1;
}
cout<<1<<endl<<s<<endl;
return 0;
}
样例 1 过了,样例 2 输出
1
4