#include <bits/stdc++.h>
using namespace std;
struct toado{
int x,y,h;
};
#define N 1009
#define maxk 100009
toado a[N*N]; int na = 0; // na là số phần tử của mảng a
int h[N][N];
#define ii pair <int,int>
#define fi first
#define se second
ii P[N][N];
int ds[maxk], KQ[maxk];
bool cmp(toado u, toado v)
{
return (u.h > v.h);
}
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
ii Root(int x, int y)
{
ii u = {x, y};
if (x == P[x][y].fi && y == P[x][y].se) return u;
P[x][y] = Root( P[x][y].fi, P[x][y].se );
return (P[x][y]);
}
void Union (ii u, ii v)
{
P[u.fi][u.se] = P[v.fi][v.se];
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // thêm cái này
freopen("land.inp","r",stdin);
freopen("land.out","w",stdout);
int m, n, k;
cin >> m >> n;
for (int i=1; i<=m; i++)
for (int j=1; j<=n; j++)
{
cin >> h[i][j];
na++;
a[na] = {i,j,h[i][j]};
}
cin >> k;
for (int i=1; i<=k; i++) cin >> ds[i];
sort(a+1, a+na+1, cmp); // for (int i=1; i<=na; i++) cout << a[i].h << endl;
int j = 1;
int kq = 0;
ii p0 = {0,0};
for (int i=k; i>=1; i--)
{
// cout << "i = " << i << endl;
while (j<=na)
{
toado u = a[j];
if (u.h <= ds[i]) break;
// cout << " u = " << " "<< u.x << " " << u.y << " " <<u.h<< endl;
P[u.x][u.y] = {u.x, u.y}; // Khởi tạo cho P cho u
kq++;
for (int t = 0; t <= 3; t++)
{
int vx, vy;
vx = u.x + dx[t];
vy = u.y + dy[t];
if (1 <= vx && vx <= m && 1 <= vy && vy <= n)
// && P[vx][vy] == {0,0})
{
// nếu v chưa được thăm thì continue luôn
if (P[vx][vy].fi == 0 && P[vx][vy].se == 0) continue;
ii Pv = Root(vx, vy);
ii Pu = Root(u.x,u.y); // Pu thay đổi nên mỗi lần kề v phải tìm lại Pu
if (Pu != Pv) // Nếu cha u khác cha v
{
kq--;
// cout << " v = " << " "<< vx << " " << vy << " kq = " << kq<< endl;
// cout << "haha \n";
Union(Pu, Pv);
}
}
}
j++;
}
// cout << kq << endl;
KQ[i] = kq;
}
for (int i=1; i<=k; i++)
cout << KQ[i] << " ";
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnN0cnVjdCB0b2Fkb3sKICAgIGludCB4LHksaDsKfTsKI2RlZmluZSBOIDEwMDkKI2RlZmluZSBtYXhrIDEwMDAwOQp0b2FkbyBhW04qTl07IGludCBuYSA9IDA7IC8vIG5hIGzDoCBz4buRIHBo4bqnbiB04butIGPhu6dhIG3huqNuZyBhCmludCBoW05dW05dOwojZGVmaW5lIGlpIHBhaXIgPGludCxpbnQ+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKaWkgUFtOXVtOXTsKaW50IGRzW21heGtdLCBLUVttYXhrXTsKYm9vbCBjbXAodG9hZG8gdSwgdG9hZG8gdikKewogICAgcmV0dXJuICh1LmggPiB2LmgpOwp9CmludCBkeFs0XT17LTEsMSwwLDB9OwppbnQgZHlbNF09ezAsMCwtMSwxfTsKCmlpIFJvb3QoaW50IHgsIGludCB5KQp7CiAgICBpaSB1ID0ge3gsIHl9OwogICAgaWYgKHggPT0gUFt4XVt5XS5maSAmJiB5ID09IFBbeF1beV0uc2UpIHJldHVybiB1OwogICAgUFt4XVt5XSA9IFJvb3QoIFBbeF1beV0uZmksIFBbeF1beV0uc2UgKTsKICAgIHJldHVybiAoUFt4XVt5XSk7Cn0KCnZvaWQgVW5pb24gKGlpIHUsIGlpIHYpCnsKICAgIFBbdS5maV1bdS5zZV0gPSBQW3YuZmldW3Yuc2VdOwp9CgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOyAvLyB0aMOqbSBjw6FpIG7DoHkKICAgIGZyZW9wZW4oImxhbmQuaW5wIiwiciIsc3RkaW4pOwogICAgZnJlb3BlbigibGFuZC5vdXQiLCJ3IixzdGRvdXQpOwogICAgaW50IG0sIG4sIGs7CiAgICBjaW4gPj4gbSA+PiBuOwogICAgZm9yIChpbnQgaT0xOyBpPD1tOyBpKyspCiAgICAgICAgZm9yIChpbnQgaj0xOyBqPD1uOyBqKyspCiAgICAgICAgewogICAgICAgICAgICBjaW4gPj4gaFtpXVtqXTsKICAgICAgICAgICAgbmErKzsKICAgICAgICAgICAgYVtuYV0gPSB7aSxqLGhbaV1bal19OwogICAgICAgIH0KCiAgICBjaW4gPj4gazsKICAgIGZvciAoaW50IGk9MTsgaTw9azsgaSsrKSBjaW4gPj4gZHNbaV07CiAgICBzb3J0KGErMSwgYStuYSsxLCBjbXApOyAgIC8vICBmb3IgKGludCBpPTE7IGk8PW5hOyBpKyspIGNvdXQgPDwgYVtpXS5oIDw8IGVuZGw7CiAgICBpbnQgaiA9IDE7CiAgICBpbnQga3EgPSAwOwogICAgaWkgcDAgPSB7MCwwfTsKICAgIGZvciAoaW50IGk9azsgaT49MTsgaS0tKQogICAgewogICAgICAvLyAgY291dCA8PCAiaSA9ICIgPDwgaSA8PCBlbmRsOwogICAgICAgIHdoaWxlIChqPD1uYSkKICAgICAgICB7CiAgICAgICAgICAgIHRvYWRvIHUgPSBhW2pdOwoKICAgICAgICAgICAgaWYgKHUuaCA8PSBkc1tpXSkgYnJlYWs7CiAgICAgICAgICAgLy8gY291dCA8PCAiICAgdSA9ICIgPDwgIiAgICI8PCB1LnggPDwgIiAiIDw8IHUueSA8PCAiICIgPDx1Lmg8PCBlbmRsOwogICAgICAgICAgICBQW3UueF1bdS55XSA9IHt1LngsIHUueX07IC8vIEto4bufaSB04bqhbyBjaG8gUCBjaG8gdQoKICAgICAgICAgICAga3ErKzsKCiAgICAgICAgICAgIGZvciAoaW50IHQgPSAwOyB0IDw9IDM7IHQrKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaW50IHZ4LCB2eTsKICAgICAgICAgICAgICAgIHZ4ID0gdS54ICsgZHhbdF07CiAgICAgICAgICAgICAgICB2eSA9IHUueSArIGR5W3RdOwogICAgICAgICAgICAgICAgaWYgKDEgPD0gdnggJiYgdnggPD0gbSAmJiAxIDw9IHZ5ICYmIHZ5IDw9IG4pCiAgICAgICAgICAgICAgICAgICAvLyAmJiBQW3Z4XVt2eV0gPT0gezAsMH0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgLy8gbuG6v3UgdiBjaMawYSDEkcaw4bujYyB0aMSDbSB0aMOsIGNvbnRpbnVlIGx1w7RuCgogICAgICAgICAgICAgICAgICAgIGlmIChQW3Z4XVt2eV0uZmkgPT0gMCAmJiBQW3Z4XVt2eV0uc2UgPT0gMCkgY29udGludWU7CgogICAgICAgICAgICAgICAgICAgIGlpIFB2ID0gUm9vdCh2eCwgdnkpOwogICAgICAgICAgICAgICAgICAgIGlpIFB1ID0gUm9vdCh1LngsdS55KTsgLy8gUHUgdGhheSDEkeG7lWkgbsOqbiBt4buXaSBs4bqnbiBr4buBIHYgcGjhuqNpIHTDrG0gbOG6oWkgUHUKICAgICAgICAgICAgICAgICAgICBpZiAoUHUgIT0gUHYpICAgLy8gTuG6v3UgY2hhIHUga2jDoWMgY2hhIHYKICAgICAgICAgICAgICAgICAgICB7CgoKICAgICAgICAgICAgICAgICAgICAgICAga3EtLTsKICAgICAgICAgICAgICAgICAgICAgIC8vICBjb3V0IDw8ICIgICB2ID0gIiA8PCAiICAgIjw8IHZ4IDw8ICIgIiA8PCB2eSA8PCAiIGtxID0gICIgPDwga3E8PCBlbmRsOwogICAgICAgICAgICAgICAgICAgICAgLy8gIGNvdXQgPDwgImhhaGEgXG4iOwogICAgICAgICAgICAgICAgICAgICAgICBVbmlvbihQdSwgUHYpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaisrOwoKICAgICAgICB9CiAgICAgICAvLyBjb3V0IDw8IGtxIDw8IGVuZGw7CiAgICAgICAgS1FbaV0gPSBrcTsKICAgIH0KICAgIGZvciAoaW50IGk9MTsgaTw9azsgaSsrKQogICAgICAgIGNvdXQgPDwgS1FbaV0gPDwgIiAiOwoKfQ==