小b接水
解题思路
特别奇怪的一道题,只需要预处理出每个积木左边和右边最高的积木,取最小值就是这个积木可以储存的水,累加即可。
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;
}