백준 6549 - 히스토그램에서 가장 큰 직사각형 (파이썬)

Updated:

Answer

import sys

def solution(l, r):
    if l == r:
        return h[l]

    m = (l + r) // 2
    nl = m
    nr = m + 1
    nh = min(h[nl], h[nr])
    tmp = nh * 2
    cnt = 2

    while True:
        if (h[nl] == 0 or nl == l) and (h[nr] == 0 or nr == r): 
            break 
        elif h[nl] == 0 or nl == l:
            if h[nr + 1] < nh:
                nh = h[nr + 1]
            nr += 1
        elif h[nr] == 0 or nr == r:
            if h[nl - 1] < nh:
                nh = h[nl - 1]
            nl -= 1
        else:
            if h[nl - 1] > h[nr + 1]:
                if h[nl - 1] < nh:
                    nh = h[nl - 1]
                nl -= 1
            else:
                if h[nr + 1] < nh:
                    nh = h[nr + 1]
                nr += 1

        cnt += 1
        tmp = max(tmp, nh * cnt)

    return(max(solution(l, m), solution(m + 1, r), tmp))  

while True:
    h = list(map(int, sys.stdin.readline().split()))

    if h[0] == 0:
        break
        
    print(solution(1, len(h) - 1))

Categories:

Updated: