题目:http://poj.org/problem?id=2559
#include<iostream> #include<cstdio> using namespace std; int cnt,l[100005],r[100005],q[100005]; long long n,a[100005]; int main() { while(1) { scanf("%lld",&n); if(!n)return 0; for(int i=1;i<=n;i++) { scanf("%lld",&a[i]); while(a[i]<a[q[cnt]]&&cnt) r[q[cnt--]]=i; q[++cnt]=i; } while(cnt)r[q[cnt--]]=n+1; for(int i=n;i;i--) { while(a[i]<a[q[cnt]]&&cnt) l[q[cnt--]]=i; q[++cnt]=i; } while(cnt)l[q[cnt--]]=0; long long mx=0; for(int i=1;i<=n;i++) { long long v=a[i]*(r[i]-l[i]-1);//long long if(v>mx)mx=v; } printf("%lld ",mx); mx=0;// } }