fork download
  1. #include <iostream>
  2.  
  3. template< class T > T _max(T a, T b) { return (!(a < b) ? a : b); }
  4.  
  5. #define i64 long long
  6.  
  7. const int MAX = 100009;
  8.  
  9. i64 calc(int *ht, int n)
  10. {
  11. i64 ret = 0;
  12. int top = 1, st[MAX], i;
  13. ht[0] = st[0] = ht[++n] = 0;
  14. for(i = 1; i <= n; i++)
  15. {
  16. while(top > 1 && ht[st[top-1]] >= ht[i])
  17. {
  18. ret = _max(ret, (i64)ht[st[top-1]]*(i64)(i - st[top-2]-1));
  19. top--;
  20. }
  21. st[top++] = i;
  22. }
  23. return ret;
  24. }
  25.  
  26. int main() {
  27. int n, i, ht[MAX];
  28. while(scanf("%d", &n)==1 && n)
  29. {
  30. for(i = 1; i <= n; i++)
  31. scanf("%d", &ht[i]);
  32. printf("%lld\n", calc(ht, n));
  33. }
  34. return 0;
  35. }
  36.  
Success #stdin #stdout 0s 15896KB
stdin
7 2 1 4 5 1 3 3
4 1000 1000 1000 1000
0
stdout
8
4000