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';
}