容器盛水问题
#include<iostream>
#include<vector>
using namespace std;
void left_mid(vector<int> &a,vector<int> &b,int mid,int n){
// if(mid==1){
// return;
// }
int max=a[0];
int maxi=0;
for(int i=1;i<mid;i++){
if(a[i]>max){
max=a[i];
maxi=i;
}
}
for(int i=maxi;i<mid;i++){
b[i]=max;
}
if(maxi==0){
return;
}//左边递归结束的标志
left_mid(a, b, maxi, n);
return;
}
void mid_right(vector<int> &a,vector<int> &b,int mid,int n){
if(mid==n-1){
return;
}
int max=a[n-1];
int maxi=n-1;
for(int i=mid+1;i<n;i++){
if(a[i]>max){
max=a[i];
maxi=i;
}
}
for(int i=maxi;i>mid;i--){
b[i]=max;
}
// for(int i=0;i<n;i++){
// cout<<b[i];
// }
mid_right(a, b, maxi, n);
return;
}
int main(){
int n;
cin>>n;
vector<int> a(n,0);//原始数组
vector<int> b(n,0);//盛满水的数组
b[0]=a[0];b[n-1]=a[n-1];
for(int i=0;i<n;i++){
cin>>a[i];
}
int max=a[0];
int maxi=0;
for(int i=0;i<n;i++){
if(a[i]>max){
max=a[i];
maxi=i;
b[i]=a[i];
}
}
left_mid(a,b,maxi,n);
mid_right(a,b,maxi,n);
int sum=0;
for(int i=0;i<n;i++){
sum+=(b[i]-a[i]);
}
cout<<sum;
return 0;
}