标签:several not air comm width The algorithm mis character
http://acm.hdu.edu.cn/showproblem.php?pid=1506
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 23458 Accepted Submission(s): 7362
单调栈经典题
1 #include<iostream> 2 #include<cstring> 3 #include<algorithm> 4 #include<cmath> 5 #include<string> 6 #include<vector> 7 #include<cstdio> 8 #include<queue> 9 #include<stack> 10 using namespace std; 11 12 struct sair{ 13 long long v; 14 int pos; 15 }a[100005]; 16 17 int main(){ 18 std::ios::sync_with_stdio(false); 19 int n; 20 while(cin>>n){ 21 if(!n) break; 22 for(int i=1;i<=n;i++){ 23 cin>>a[i].v; 24 a[i].pos=i; 25 } 26 stack<sair>st; 27 long long ans=0; 28 long long cnt,pos; 29 for(int i=1;i<=n;i++){ 30 if(st.empty()){ 31 st.push(a[i]); 32 ans=max(ans,st.top().v); 33 } 34 else{ 35 while(!st.empty()&&st.top().v>=a[i].v){ 36 cnt=st.top().v; 37 pos=st.top().pos; 38 st.pop(); 39 if(st.empty()){ 40 ans=max(ans,cnt*(i-1)); 41 } 42 else{ 43 ans=max(ans,cnt*(i-1-st.top().pos)); 44 } 45 } 46 st.push(a[i]); 47 } 48 } 49 int Last; 50 if(!st.empty()){ 51 Last=st.top().pos; 52 } 53 while(!st.empty()){ 54 cnt=st.top().v; 55 pos=st.top().pos; 56 st.pop(); 57 if(st.empty()){ 58 ans=max(ans,cnt*n);; 59 } 60 else{ 61 ans=max(ans,cnt*(Last-st.top().pos)); 62 } 63 } 64 cout<<ans<<endl; 65 } 66 system("pause"); 67 } 68 /* 69 6 2 5 2 5 5 2 70 5 1 2 3 4 4 71 7 2 1 4 5 1 3 3 72 4 1000 1000 1000 1000 73 3 2 1 2 74 4 2 2 5 5 75 */
Largest Rectangle in a Histogram(附上几组测试数据)
标签:several not air comm width The algorithm mis character
原文地址:https://www.cnblogs.com/Fighting-sh/p/10037519.html