我亲爱的小同学们,这其实是个脑筋急转弯…… - -|||
一个位置的液柱高度只取决于三个因素:左边最高多高、右边最高多高、底多高。
所以,O(n)扫描记录一下前两个参数,然后直接算就行……
int n=arr.size();
auto lm=new int[n+10];lm+=1;
auto rm=new int[n+10];rm+=1;
lm[-1]=rm[n]=0;
for (int i=0;i<n;++i)
{
lm[i]=max(lm[i-1],arr[i]);
rm[n-i-1]=max(rm[n-i],arr[n-i-1]);
}
long long res=0;
for (int i=0;i<n;++i)
res+=max(0, min(lm[i-1],rm[i+1])-arr[i] );



京公网安备 11010502036488号