Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
180713 | C班-张腾午 | 收集雨水 | C++ | 通过 | 100 | 2 MS | 284 KB | 464 | 2024-08-21 17:27:05 |
#include<bits/stdc++.h> using namespace std; int a[10005],n; stack<int> s; int main() { int i; long long ans=0; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0 ;i<n;i++) { while(!s.empty()&&a[s.top()]<a[i]) { int low=s.top(); s.pop(); if(s.empty()) break; long long dis=i-s.top()-1; int maxx=min(a[s.top()],a[i]); ans+=dis*(maxx-a[low]); } s.push(i); } printf("%lld",ans); return 0; }