#include<stdio.h>
int map[102][102]= {0};
int cnt=0,part=0, hhh[102]= {},temp;
void sort()
{
int i,j;
for(i=1;i<cnt;i++)
{
for(j=1;j<=cnt-i;j++)
{
if(hhh[j]>hhh[j+1])
{
temp = hhh[j];
hhh[j] = hhh[j+1];
hhh[j+1] = temp;
}
}
}
}
void dfs(int x, int y)
{
if(map[x][y]==0)
{
map[x][y]=-1;
part++;
dfs(x+1,y);
dfs(x-1,y);
dfs(x,y+1);
dfs(x,y-1);
}
}
int main()
{
int x1,x2,y1,y2;
int m,n,k;
int i,j,x,y;
scanf("%d %d %d", &m, &n, &k);
for(i=0; i<k; i++)
{
scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
for(x=x1+1; x<=x2; x++)
{
for(y=y1+1; y<=y2; y++)
{
map[y][x] = 1;
}
}
}
for(i=m+1; i>=0; i--)
{
for(j=0; j<=n+1; j++)
{
map[0][j]=1;
map[m+1][j]=1;
map[i][0]=1;
map[i][n+1]=1;
// printf("%d ", map[i][j]);
}
// printf("\n");
}
for(i=m+1; i>=1; i--)
{
for(j=0; j<=n; j++)
{
if(map[i][j]==0)
{
part=0;
dfs(i,j);
cnt++;
hhh[cnt]=part;
}
}
}
printf("%d", cnt);
printf("\n");
sort();
for(i=1;i<=cnt;i++)
{
printf("%d ", hhh[i]);
}
}
#include<stdio.h>
int map[102][102]= {},map1[102][102], c[10000]={};
int cnt=0,n=0;
void dfs(int x,int y,int k)
{
if(map[x][y]>k)
{
map[x][y]=-1;
dfs(x,y+1,k);
dfs(x,y-1,k);
dfs(x+1,y,k);
dfs(x-1,y,k);
}
}
void fill()
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
map[i][j]=map1[i][j];
}
}
}
int main()
{
int i,j,k,max=1,min=100,mm=1;
scanf("%d", &n);
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
scanf("%d",&map[i][j]);
map1[i][j]=map[i][j];
if(max<map[i][j])
{
max = map[i][j];
}
if(min>map[i][j])
{
min = map[i][j];
}
}
}
for(k=min; k<max; k++)
{
cnt=0;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(map[i][j]>k)
{
dfs(i,j,k);
cnt++;
}
}
}
fill();
c[k]=cnt;
}
for(i=min; i<max ; i++)
{
if(mm<c[i])
{
mm=c[i];
}
}
printf("%d",mm);
return 0;
}
#include<stdio.h>
int map[1002][1002]= {};
point queue[10000]= {};
int front=0,rear=0;
typedef struct _point
{
int x,y;
}point;
void bfs()
{
}
int main()
{
int m,n,i,j;
scanf("%d %d", &m, &n);
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
{
scanf("%d", &map[i][j]);
}
}
for(i=0; i<m; i++)
{
for(j=0; j<n; j++)
{
bfs()
}
}
}