C语言蓄水量的计算问题

作为一个C语言初学者,语言逻辑能力不算好,在这方面确实很吃亏,在本题上就很体现。
看到问题也是有点晕的,想了半小时才来了解题思路,但又被表达难倒了,想请大家带带。感谢!
(思路大概是计算左右两边的柱子高度再比较当前柱子的高度得出蓄水量,大概吧?有点像木桶问题。)
大概意思是这样吧(不是还请纠正)

img

问题描述

img


题目给定的函数

img

img


最后是测试集

img

没看懂,二维空间还能储水,好神奇
柱子之间存多少水,但也没说柱子之间的距离有多少,输入的2 1 2是柱子的高度?

#include <stdio.h>
long long a[1000],l[1000],r[1000];

long long leftmax(int n)
{
    long long max = a[0];
    for(int i=1;i<=n;i++)
    {
        if(max < a[i])
            max = a[i];
    }
    return max;
}

long long rightmax(int n,int r)
{
    long long max = a[n];
    for(int i=n+1;i<=r;i++)
    {
        if(max < a[i])
            max = a[i];
    }
    return max;
}

long long less(long long a,long long b)
{
    if(a<b)
        return a;
    return b;
}
int main()
{
    int n,i;
    long long high = 0;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%lld",&a[i]);
    if(n<=2)
        printf("0\n");
    for(i=1;i<n-1;i++)
    {
        l[i] = leftmax(i);
        r[i] = rightmax(i,n-1);
    }
    for(i=1;i<n-1;i++)
        high += less(l[i],r[i])-a[i];
    printf("%lld",high);
    return 0;
}