아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

히스토그램에서 가장 큰 직사각형

면접 대비

시간 제한1초메모리 제한256 MB

요약
너비가 1인 막대들의 높이가 주어질 때 히스토그램 안에 들어가는 가장 큰 직사각형의 넓이를 구하고, 0이 나올 때까지 여러 테스트 케이스를 처리한다.
난이도

보통10점 중 6점

유형
스택, 배열, 그리디, 구현
정답자
아직 제출이 없습니다

문제

히스토그램은 밑변이 한 직선 위에 나란히 놓인 여러 개의 직사각형으로 이루어진 도형이다. 각 직사각형의 너비는 모두 11로 같지만 높이는 서로 다를 수 있다. 예를 들어 높이가 각각 2,1,4,5,1,3,32, 1, 4, 5, 1, 3, 3인 직사각형 77개를 왼쪽부터 나란히 붙이면 하나의 히스토그램이 된다.

주어진 히스토그램 안에 완전히 들어가는 직사각형 중에서 넓이가 가장 큰 것의 넓이를 구하는 프로그램을 작성하시오. 이때 찾는 직사각형은 연속한 몇 개의 막대에 걸쳐 있으며, 그 높이는 걸쳐 있는 막대들의 높이 중 가장 작은 값과 같다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 한 줄로 주어지며, 먼저 직사각형의 개수 nn이 주어진다. (1≤n≤100,0001 \le n \le 100{,}000) 이어서 히스토그램을 이루는 직사각형의 높이 h1,h2,…,hnh_1, h_2, \ldots, h_n이 왼쪽부터 오른쪽 순서로 주어진다. (0≤hi≤1,000,000,0000 \le h_i \le 1{,}000{,}000{,}000) 모든 직사각형의 너비는 11이다.

입력의 마지막 줄에는 00 하나만 주어지며, 이 줄은 처리하지 않는다.

출력

각 테스트 케이스마다 히스토그램에서 넓이가 가장 큰 직사각형의 넓이를 한 줄에 하나씩 출력한다.

예제3

  1. 예제 1

    입력
    7 2 1 4 5 1 3 3
    4 1000 1000 1000 1000
    0
    
    예상 출력
    8
    4000
    
  2. 예제 2

    입력
    1 5
    0
    
    예상 출력
    5
    
  3. 예제 3

    입력
    3 1 2 3
    2 4 4
    0
    
    예상 출력
    4
    8