问题描述:给定一个直方图,假设有人从上面源源不断地倒水,最后直方图能存多少水量?
输入格式
第1行:1个正整数N,不超过10000。
第二行:N个整数,范围[0,100000]。
输出格式
输出一个整数。
样例输入
12
样例输出
6
这题非常的经典,有多种方法解决,我今天给大家看的较为简单的逐位算法,代码如下
#include<bits/stdc++.h>
using namespace std;
long long n,m,a[100009],b[100009],c[100009],sum;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]>=b[i-1])b[i]=a[i];
else b[i]=b[i-1];
}
for(int i=n;i>=1;i--)
{
if(a[i]>=c[i+1])c[i]=a[i];
else c[i]=c[i+1];
}
for(int i=1;i<=n;i++)
{
m=min(b[i],c[i]);
sum+=m-a[i];
}
cout<<sum;
return 0;
}
记得点个关注哦