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
*/