fork download
  1. import java.util.*;
  2. import java.io.*;
  3.  
  4. class HISTOGRA {
  5. public static void main(String[] args) {
  6. try {
  7. StringBuilder sb = new StringBuilder();
  8. while (true) {
  9. StringTokenizer st = new StringTokenizer(br.readLine());
  10. int N = Integer.parseInt(st.nextToken());
  11. if (N == 0)
  12. break;
  13. int max_area = 0;
  14. int cur_area = 0;
  15. int arr[] = new int[N + 1];
  16. Stack<Integer> stack = new Stack<Integer>();
  17.  
  18. for (int i = 0; i < N; i++) {
  19. arr[i] = Integer.parseInt(st.nextToken());
  20. }
  21. arr[N] = 0;
  22.  
  23. int i = 0;
  24. for (i = 0; i <= N; i++) {
  25. if (stack.isEmpty()) {
  26. stack.push(i);
  27. } else if (arr[i] >= arr[stack.peek()]) {
  28. stack.push(i);
  29. i++;
  30. }
  31. if (!stack.isEmpty() && arr[i] < arr[stack.peek()]) {
  32. while (!stack.isEmpty() && arr[i] < arr[stack.peek()]) {
  33. int index = stack.pop();
  34. if (stack.isEmpty()) {
  35. cur_area = arr[index] * i;
  36. max_area = cur_area > max_area ? cur_area : max_area;
  37. } else {
  38. cur_area = arr[index] * (i - stack.peek() - 1);
  39. max_area = cur_area > max_area ? cur_area : max_area;
  40. }
  41. }
  42. stack.push(i);
  43. }
  44. }
  45. sb.append(max_area + "\n");
  46.  
  47. }
  48. System.out.print(sb);
  49. } catch (Exception e) {
  50.  
  51. }
  52. }
  53.  
  54. }
  55.  
Success #stdin #stdout 0.06s 32464KB
stdin
Standard input is empty
stdout
Standard output is empty