Submission

Status:

PPPPPPPPPP

Subtask/Task Score:

100/100

Score: 100

User: kavin8888

Problemset: ปริมาตรน้ำท่วม

Language: cpp

Time: 0.003 second

Submitted On: 2025-10-16 20:44:45

#include <bits/stdc++.h>

using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> h(n);
    for (int i = 0; i < n; i++) {
        cin >> h[i];
    }

    // maxLeft[i] = max height from 0 to i
    // maxRight[i] = max height from n - 1 to i
    vector<int> maxLeft(n), maxRight(n);

    maxLeft[0] = h[0];
    for (int i = 1; i < n; i++) {
        maxLeft[i] = max(h[i], maxLeft[i - 1]);
    }

    maxRight[n - 1] = h[n - 1];
    for (int i = n - 2; i >= 0; i--) {
        maxRight[i] = max(h[i], maxRight[i + 1]);
    }

    int ans = 0;
    for (int i = 1; i < n - 1; i++) {
        int mn = min(maxLeft[i], maxRight[i]);
        if (h[i] < mn) {
            ans += mn - h[i];
        }
    }
    cout << ans << '\n';
    return 0;
}