szk2022 @ 2023-12-06 18:26:11
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,vis[1010][100010],ans,xx,yy;
char num;
int dx[5]={0,1,-1,0,0};
int dy[5]={0,0,0,-1,1};
struct m{
int num,ans;
}mp[1010][100010];
struct node{
int x,y;
}a;
queue<node> q;
queue<node> v;
void color(){
for(int i=0;i<=n+1;i++){
for(int j=0;j<=m+1;j++){
if(i>=1 && i<=n && j>=1 && j<=m){
continue;
}else{
mp[i][j].num=3;
}
}
}
}
void bfs(){
while(!q.empty()){
node now;
now.x=q.front().x,now.y=q.front().y;
v.push(now);
q.pop();
for(int i=1;i<=4;i++){
int nx=now.x+dx[i],ny=now.y+dy[i];
if(nx>=1 && nx<=n && ny>=1 && ny<=m){
if(vis[nx][ny]==0){
if(mp[now.x][now.y].num==1){
if(mp[nx][ny].num==0){
vis[nx][ny]=1;
ans++;
node tmp;
tmp.x=nx,tmp.y=ny;
q.push(tmp);
}
}else{
if(mp[nx][ny].num==1){
vis[nx][ny]=1;
ans++;
node tmp;
tmp.x=nx,tmp.y=ny;
q.push(tmp);
}
}
}
}
}
}
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>num;
mp[i][j].num=num-'0';
}
}
color();
for(int i=1;i<=m;i++){
ans=1;
cin>>xx>>yy;
if(vis[xx][yy]){
cout<<mp[xx][yy].ans;
}else{
a.x=xx,a.y=yy;
q.push(a);
vis[xx][yy]=1;
bfs();
while(!v.empty()){
mp[v.front().x][v.front().y].ans=ans;
v.pop();
}
cout<<ans<<endl;
}
}
}