Submission
Status:
PPPPPPPPPP
Subtask/Task Score:
100/100
Score: 100
User: Monasm
Problemset: ปริมาตรน้ำท่วม
Language: cpp
Time: 0.002 second
Submitted On: 2025-08-21 23:53:25
#include <iostream>
#include <cmath>
using namespace std;
int main(){
int n;cin>>n;
int arr[n],pref[n]={0},ml[n]={0},mr[n]={0},mx=0,m=0,ans=0;
for(int i=0;i<n;i++){
cin>>arr[i];
pref[i]=(i==0?arr[i]:pref[i-1]+arr[i]);
ml[i]=(i==0?arr[i]:max(ml[i-1],arr[i]));
if(arr[i]>mx){
mx=arr[i];
m=i;
}
}
for(int i=n-1;i>=0;i--){
mr[i]=(i==n-1?arr[i]:max(arr[i],mr[i+1]));
}
int ptl=m,ptr=m;
for(int i=m-1;i>=0;i--){
if(ml[i]==arr[i]){
ans+=((ptl-i-1)*min(arr[ptl],arr[i]))-(pref[ptl-1]-pref[i]);
ptl=i;
}
}
for(int i=m+1;i<n;i++){
if(mr[i]==arr[i]){
ans+=(min(arr[i],arr[ptr])*(i-ptr-1))-(pref[i-1]-pref[ptr]);
ptr=i;
}
}
cout<<ans;
}
/*
14
1 4 2 5 1 1 4 2 3 1 6 4 5 1
*/