acwing131. 直方图中最大的矩形()-其他
acwing131. 直方图中最大的矩形()
#include "bits/stdc++.h"
using namespace std;
const int N=1e5+3;
#define int long long
int n,a[N];
int hh,stk[N],w[N];
void sov(){
hh=0;
memset(a,0,sizeof a);
stk[n+1]=w[n+1]=0;
int i,ans=0;
for(i=1;i<=n;i++) cin>>a[i];
for(i=1;i<=n+1;i++){
int t=0;
while(hh>0&&stk[hh]>=a[i]){
t+=w[hh];
ans=max(ans,t*stk[hh]);
hh--;
}
stk[++hh]=a[i]; w[hh]=t+1;
}
cout<<ans<<endl;
}
main(){
while(cin>>n,n) sov();
}
————————
#include "bits/stdc++.h"
using namespace std;
const int N=1e5+3;
#define int long long
int n,a[N];
int hh,stk[N],w[N];
void sov(){
hh=0;
memset(a,0,sizeof a);
stk[n+1]=w[n+1]=0;
int i,ans=0;
for(i=1;i<=n;i++) cin>>a[i];
for(i=1;i<=n+1;i++){
int t=0;
while(hh>0&&stk[hh]>=a[i]){
t+=w[hh];
ans=max(ans,t*stk[hh]);
hh--;
}
stk[++hh]=a[i]; w[hh]=t+1;
}
cout<<ans<<endl;
}
main(){
while(cin>>n,n) sov();
}