Submission

Status:

PPPPPPPPPP

Subtask/Task Score:

100/100

Score: 100

User: Pera

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

Language: cpp

Time: 0.003 second

Submitted On: 2025-05-24 11:48:59

#include <bits/stdc++.h>
using namespace std;

int trap(vector<int> &height) {
    vector<int> max_left(height.size());
    max_left[0] = height[0];

    for (int i = 1; i < height.size(); ++i) {
        max_left[i] = max(max_left[i-1], height[i]);
    }

    vector<int> max_right(height.size());
    max_right[height.size() - 1] = height[height.size() - 1];
    for (int i = height.size() - 2; i > 0; --i) {
        max_right[i] = max(height[i], max_right[i+1]);
    }

    int total = 0;
    for (int i = 1; i < height.size() - 1; ++i) {
        int water_level = min(max_left[i], max_right[i]);
        total += max(water_level - height[i], 0);
    }
    return total;
}

int main() {
    ios_base::sync_with_stdio(false);

    int n; cin >> n;
    vector<int> height(n);
    for (int i = 0; i < n; ++i) {
        int num; cin >> num;
        height.push_back(num);
    }

    cout << trap(height) << '\n';
}