```cpp
#include<bits/stdc++.h>
using namespace std;
int n,h,l,r,fg1,fg2,ans,ma;
bool mp[5005][10005];
bool fl[5005][10005];
int arr[114514];
int main()
{
cin>>n;
for(int i=0;i<n;i++) {
cin>>h;
ma=max(ma,h);
for(int j=0;j<h;j++) {
mp[i][j]=1;
}
}
for(int j=0;j<ma;j++) {
for(int i=0;i<n;i++) {
if (mp[i][j]==0 && fl[i][j]==0) {
l=i,r=i,fg1=0,fg2=0;
while(l>=0) {
if (mp[l][j]==1) {
fg1=1;
break;
}
l--;
}
while(r<n) {
if (mp[r][j]==1) {
fg2=1;
break;
}
r++;
}
//cout<<i<<" "<<j<<" "<<l<<" "<<r<<endl;
if (fg1 && fg2) {
for(int k=l+1;k<r;k++) {
fl[k][j]=1;
}
}
}
}
}
for(int i=0;i<n;i++) {
for(int j=0;j<ma;j++) {
ans+=fl[i][j];
}
}
cout<<ans;
}
```
@[tzzl3035](/user/1030559)
by Fish_redflying @ 2024-10-22 23:50:37
考虑遍历每一个空格,一旦发现空格没被标记过,设定左右指针遍历到第一堵墙。如果有碰到墙,将它计入标记数组。循环往复。最后统计标记即可。
by Fish_redflying @ 2024-10-22 23:55:59