[15725] 接雨水

题目描述

接雨水

给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

注: 上面蓝色部分面积是样例1中能够接到雨水的部分。

输入格式

第一行是一个正整数nn,nn表示柱子的数量。

第二行有nn用空格隔开的正整数,第height[i]height[i]个数字表示第ii个柱子的高度。

输出格式

输出一个整数

样例 #1

样例输入 #1

12
0 1 0 2 1 0 1 3 2 1 2 1

样例输出 #1

6

样例 #2

样例输入 #2

6
4 2 0 3 2 5

样例输出 #2

9

提示

1<=n<=2*10^4
0<=height[i]<=10^5

这个题做法比较简单。
我们就只用考虑每根柱子上的积水就可以了
(找到两边最高柱子,取最小的减去当前柱子高度即为当前柱子上的积水)

//pre是前缀和,suf是后缀,ans为答案
for(int i=0;i<n;i++){
    if(min(pre[i],suf[i])<=a[i])continue;//判断是否两边最高柱子是否比当前高或一样高,每当前高跳过,即为不能积水
    ans+=(min(pre[i],suf[i])-a[i]);
 }
//核心代码