rt,心态已炸裂
#include <bits/stdc++.h>
using namespace std;
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
bool vis[505][505],awa;
int h[505][505],l[505][505],r[505][505],cnt;
int n,m;
void dfs(int x,int y){
vis[x][y]=1;
for(int i=0;i<4;i++){
int x1=dx[i]+x,y1=dy[i]+y;
if(y1<1||y1>m||x1<1||x1>n||h[x][y]<=h[x1][y1])continue;
if(!vis[x1][y1])dfs(x1,y1);
l[x][y]=min(l[x1][y1],l[x][y]);
r[x][y]=max(r[x1][y1],r[x][y]);
}
}
int main(){
memset(l,20000000,sizeof(l));
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>h[i][j];
}
}
for(int j=1;j<=m;j++){
l[n][j]=r[n][j]=j;
}
for(int i=1;i<=m;i++){
if(!vis[1][i])dfs(1,i);
}
for(int i=1;i<=m;i++){
if(!vis[n][i]){
awa=1;
cnt++;
}
}
if(awa){
cout<<"0\n"<<cnt;
return 0;
}
cnt=0;
int ll=1,rr=r[1][1];
while(ll<=m){
for(int i=1;i<=m;i++){
if(l[i][1]<=ll){
cout<<rr<<' '<<r[1][i]<<'\n';
rr=max(rr,r[1][i]);
}
}
ll=rr+1;
cout<<ll<<'\n';
cnt++;
}
cout<<"1\n"<<cnt;
return 0;
}