Submission
Status:
PPPPPPPPPP
Subtask/Task Score:
100/100
Score: 100
User: sakurajima
Problemset: ปริมาตรน้ำท่วม
Language: cpp
Time: 0.002 second
Submitted On: 2026-09-30 13:01:08
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<int> soils(n);
for (int i = 0; i < n; i++) {
cin >> soils[i];
}
int rains = 0;
stack<int> st;
st.push(0);
for (int i = 1; i < n; i++) {
while (!st.empty() && soils[st.top()] <= soils[i]) {
int middle = st.top();
st.pop();
if (st.empty()) break;
int left = st.top();
int right = i;
int water_height = min(soils[left], soils[right]) - soils[middle];
int distance = right - left - 1;
rains += water_height * distance;
}
st.push(i);
}
cout << rains;
}