Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。
・問題 "Largest Rectangle in a Histogram"
https://onlinejudge.u-aizu.ac.jp/problems/DPL_3_C
・ヒストグラムの中の最大長方形
僕が作成、提出したコードは、以下のとおりです。
Aizu Online Judge in C++ #DPL_3_C : Largest Rectangle in a Histogram
/* Aizu Online Judge in C++ #DPL_3_C : Largest Rectangle in a Histogram https://onlinejudge.u-aizu.ac.jp/problems/DPL_3_C 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; int main(void){ ll n; cin>>n; vector<ll> h(n+1,0); for(ll i=0;i<n;i++){ cin>>h[i]; } ll ans=0; stack<ll> s,t; for(ll i=0;i<=n;i++){ while(!s.empty() && h[s.top()]>=h[i]){ ans=max(ans,h[s.top()]*(i-t.top()-1)); s.pop(); t.pop(); } t.push(((s.empty()) ? -1 : s.top())); s.push(i); } cout<<ans<<endl; return 0; }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/