http://acm.hdu.edu.cn/showproblem.php?pid=1506 #include<iostream> using namespace std; #define N 100001 int l[N],r[N]; int h[N]; int main(void) { int n; while(scanf("%d",&n),n) { for(int i=1;i<=n;i++) { scanf("%d",&h[i]); l[i]=r[i]=i; } for(int i=1;i<=n;i++) while(l[i]>1&&h[l[i]-1]>=h[i]) l[i]=l[l[i]-1]; for(int i=n;i>=1;i--) while(r[i]<n&&h[r[i]+1]>=h[i]) r[i]=r[r[i]+1]; __int64 ans=0; for(int i=1;i<=n;i++) { __int64 temp=(__int64)(r[i]-l[i]+1)*h[i]; if(ans<temp) ans=temp; } printf("%I64d/n",ans); } } 注意注意:求r[]的时候要从后往前,不然就没有优化的效果了!还有就是算的时候要注意(__int64)强制转化。