思路:
对于一个积木,如果上方有水,直接就是左右第一个比它高的最小值减去它
c o d e code code
#include<iostream>
#include<cstdio>
#define int long long
using namespace std;
int n, ans;
int a[50010], b[50010], c[50010];
signed main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
b[i]=max(b[i-1],a[i]);
}
for(int i=n;i>=1;i--)
c[i]=max(c[i+1],a[i]);
for(int i=1; i<=n; i++)
ans+=min(b[i],c[i])-a[i];
cout<<ans<<endl;
}