STO
orz\
所有格子 - 不是山丘的格子 = 答案
#include <bits/stdc++.h>
#define int long long
using namespace std;
int mp[705][705], cnt = 0;
int n, m;
bool vis[705][705], flag = 1;
int area = 0;
void dfs(int h, int x, int y) {
if (x < 1 || y < 1 || y > n || y > n)
return;
if (vis[x][y])
return;
if (mp[x][y] != h) {
if (mp[x][y] > h)
flag = false;
return;
}
vis[x][y] = 1;
++area;
dfs(h, x - 1, y + 1);
dfs(h, x, y + 1);
dfs(h, x + 1, y + 1);
dfs(h, x + 1, y);
dfs(h, x + 1, y - 1);
dfs(h, x, y - 1);
dfs(h, x - 1, y - 1);
dfs(h, x - 1, y);
}
signed main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> mp[i][j];
}
}
cnt = n * m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
area = 0, flag = 1;
memset(vis, 0, sizeof(vis));
dfs(mp[i][j], i, j);
if (!flag) {
cout << area << "\n";
cnt -= area;
}
}
}
cout << cnt;
return 0;
}