문제
2336. 굉장한 학생 : https://www.acmicpc.net/problem/2336
2336번: 굉장한 학생
첫째 줄에 N(1 ≤ N ≤ 500,000)이 주어진다. 다음 세 개의 줄에는 각 시험에서 1등인 학생부터 N등인 학생이 순서대로 주어진다. 학생의 번호는 1부터 N까지 매겨져 있다.
www.acmicpc.net
문제 파악하기
- 나보다 모든 시험을 잘 본 학생이 없는 경우, 굉장한 학생이 됩니다.
- N이 500,000이기 때문에 단순 for문으로는 힘듭니다.
- 이 경우, 세그먼트 트리를 차근차근 채워넣으면 문제를 해결할 수 있습니다.
문제 해결하기
- 우선 첫번째 시험 결과 순서대로 세그먼트 트리에 값을 저장합니다.
- 세그먼트 트리에 저장하는 위치는 두번째 시험을 기준으로 합니다. 두번째 시험의 등수 위치에 현재 학생의 값을 저장합니다.
- 세그먼트 트리에 저장하는 값은 세번째 시험 등수입니다.
- 이렇게 세그먼트 트리를 구성하면 현재 노드보다 왼쪽에 있는 학생들은 나보다 첫번째, 두번째 시험을 잘 본 학생이라는 의미입니다.
여기서 세번째 시험 결과까지 확인하면 현재 노드가 굉장한 학생인지 여부를 알 수 있습니다. - 세그먼트 트리는 등수를 저장하기 때문에 최소 세그먼트 트리로 구현하면 됩니다.
후기
세그먼트 트리를 이렇게 사용할 수도 있다는 걸 보여준 문제라고 생각합니다. 세그먼트 트리의 활용 문제로 추천드립니다.
'문제 노트 > 백준' 카테고리의 다른 글
구간 합 구하기 4( BOJ 11659 ) (0) | 2021.03.18 |
---|---|
구간 합 구하기 3( BOJ 11658 ) (0) | 2021.03.16 |
Fine Dining( BOJ 16763 ) (0) | 2020.12.13 |
Cowpatibility( BOJ 16764 ) (0) | 2020.12.13 |
사탕 가게( BOJ 4781 ) (0) | 2020.11.29 |