额。。。DFS会RE。。。
#include <stdio.h>
#include<string.h>


int mmm[1024][1024];
int rj[1024][1024];

int cnt, N, M, i1, j1, i2, j2;


int q[1024*1024][2];
const int dx[4] = {1, 0, -1, 0};
const int dy[4] = {0, 1, 0, -1};

void BFS(int i, int j)
{
mmm[i][j]=1;
int front, rear, k;
q[0][0] = i;
q[0][1] = j;
for(front = 0, rear = 1; front < rear; front++)
for(k = 0; k < 4; k++)
{
i = q[front][0] + dx[k];
j = q[front][1] + dy[k];
if((i>=i1 && i<=i2 && j>=j1 && j<=j2) && mmm[i][j]==0)
{
mmm[i][j] = 1;
q[rear][0] = i;
q[rear++][1] = j;
}
}
}


/*
void DFS(int i, int j)
{
mmm[i][j]=1;
if(i + 1 <= i2 && mmm[i + 1][j] == 0)
DFS(i + 1, j);
if(i - 1 >= i1 && mmm[i - 1][j] == 0)
DFS(i - 1, j);
if(j + 1 <= j2 && mmm[i][j + 1] == 0)
DFS(i, j + 1);
if(j - 1 >= j1 && mmm[i][j - 1] == 0)
DFS(i, j - 1);
}
*/


void gra()
{
for(int ii = i1; ii <= i2; ii++ )
{
int jj = j1;
while( jj <= j2 )
{
while(rj[ii][jj] > 0)
{
jj = rj[ii][jj];
if(jj > j2)
break;
}
if(jj > j2)
break;
if( mmm[ii][jj] == 0 )
{
//DFS(ii, jj);
BFS(ii, jj);
cnt++;
}
jj++;
}
}
}


int main()
{

scanf("%d%d", &N, &M);
for(int i = 0; i < M; i++ )
{
cnt = 0;
scanf("%d%d%d%d", &i1, &j1, &i2, &j2);

if(j1 > N) j1 = N;
if(j2 > N) j2 = N;
gra();
for(int ci = i1; ci <= i2; ci ++)
{
if(rj[ci][j1] < j2+1)
rj[ci][j1] = j2+1;
}
printf("%d\n", cnt);
}

return 0;
}








































































































【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步