题解:从整个区间开始,从大到小不断寻找区间两端最值,两个最值中较小那个可以确定可以储蓄多少水,当有比较小最值大的值存在,缩短区间,重新确定最值大小,不断重复知道l>=r
结束;
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int a[N];
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
int l=0,r=n-1;
long long res=0;
int x,y;
while(1)
{
if(l>=r) break;
x=a[l];
y=a[r];
if(x<y)
{
while(l<r&&a[++l]<=x)
{
res += x-a[l];
}
}
else
{
while(l<r&&a[--r]<=y)
{
res+= y-a[r];
}
}
}
cout<<res;
return 0;
}