Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
180593 | C班周思宇 | 收集雨水 | C++ | 通过 | 100 | 2 MS | 300 KB | 528 | 2024-08-21 16:24:49 |
#include <bits/stdc++.h> using namespace std; int a[10005],n; stack<int> st; int main() { scanf("%d",&n); for(int i=0; i<n; i++) cin>>a[i]; long long ans=0; for (int i=0; i<n; i++) { while (!st.empty() && a[st.top()]<a[i]) { int low=st.top(); st.pop(); if (st.empty()) break; long long dist=i-st.top()-1; int h=min(a[st.top()],a[i]); ans+=dist*(h-a[low]); } st.push(i); } printf("%lld\n",ans); return 0; }