6549번 - 히스토그램에서 가장 큰 직사각형
https://www.acmicpc.net/blog/v...
문제를 풀다 분할 정복으로 접근하기가 개념이 너무 어려워 백준님이 쓰신 링크에서
아래와 같은 소스 부분을 보았습니다.
query함수는 i~j 범위 내에서 최소의 높이 인덱스를 반환하는 함수인데
제가 궁금한 부분은, 분할의 과정이 아래와 같은 단계로 진행된다고 이해하고 있습니다.
** 전체 범위 중 3번째 인덱스가 최소의 높이임 -> 0~2번째 // 4~n번째 탐색. -> ... -> ...
이런 식으로 진행된다면, 아래 소스코드의 24번째 라인에서 세그먼트 트리로 분할한 노드에서
i~j는 탐색하려는 범위 ( 전 단계에서 높이의 최솟값을 갖는 인덱스를 기준으로 양 옆을 나눈 것 중 하나)이고,
start, end는 tree의 노드가 커버하는 구간일텐데,
만약 i=start-1이라면, 아래 코드에서 tree[node] (start~end의 인덱스 사이의 최솟값을 갖는 인덱스)를 반환할텐데,
start-1은 고려를 안 하게 되는 거 아닌가요?
어떤 점이 잘못 이해하고 있는건지 궁금합니다. 멍하게 모니터만 계속 바라보고 있습니다.. ㅋㅋㅋ
감사합니다
말씀하신 상황이라면
start-1 위치는 다른 query 콜에서 계산되겠죠
맨 처음엔 start, end 가 각각 0, n-1 이고
점점 query 콜이 쪼개지게 되는데
다 하고나면 정확히 i~j 구간을 잘 커버하게 됩니다
답변 감사합니다!
정말 많은 도움이 되었습니다!
댓글을 작성하려면 로그인해야 합니다.
dreamian 6년 전
https://www.acmicpc.net/blog/v...
문제를 풀다 분할 정복으로 접근하기가 개념이 너무 어려워 백준님이 쓰신 링크에서
아래와 같은 소스 부분을 보았습니다.
query함수는 i~j 범위 내에서 최소의 높이 인덱스를 반환하는 함수인데
제가 궁금한 부분은, 분할의 과정이 아래와 같은 단계로 진행된다고 이해하고 있습니다.
** 전체 범위 중 3번째 인덱스가 최소의 높이임 -> 0~2번째 // 4~n번째 탐색. -> ... -> ...
이런 식으로 진행된다면, 아래 소스코드의 24번째 라인에서 세그먼트 트리로 분할한 노드에서
i~j는 탐색하려는 범위 ( 전 단계에서 높이의 최솟값을 갖는 인덱스를 기준으로 양 옆을 나눈 것 중 하나)이고,
start, end는 tree의 노드가 커버하는 구간일텐데,
만약 i=start-1이라면, 아래 코드에서 tree[node] (start~end의 인덱스 사이의 최솟값을 갖는 인덱스)를 반환할텐데,
start-1은 고려를 안 하게 되는 거 아닌가요?
어떤 점이 잘못 이해하고 있는건지 궁금합니다. 멍하게 모니터만 계속 바라보고 있습니다.. ㅋㅋㅋ
감사합니다