문제 출처
- 2019 KOI 1차 고등부 1번
사용 알고리즘
- Segment Tree
시간복잡도
- O(NlgN)
풀이
각각의 계산대를 세그먼트 트리의 리프 노드로 관리할 것 입니다.
고객들은 적게 대기를 하는 계산대, 대기 시간이 같다면 번호가 작은 계산대에 배정이 됩니다.
최솟값을 관리하는 세그먼트 트리의 노드를 아래와 같이 선언해줍시다.
1 |
|
w는 대기 시간, idx는 계산대 번호입니다. 당연히 모든 리프 노드의 idx값은 고정입니다.
고객들의 정보를 저장하는 구조체인 User, 고객들이 나갈 때의 정보를 저장하는 구조체인 Mall을 만들어줍시다.
1 |
|
끝나는 시간이 빠를수록 먼저 나가고, 끝나는 시간이 같다면 번호가 더 큰 계산대를 이용한 고객이 먼저 나갑니다.
그러므로 위 코드처럼 less operator를 정의를 합니다.
고객들은 들어온 순서대로 처리를 해주면 됩니다. 자세한 구현은 아래 코드를 참고하시면 됩니다.
전체 코드
1 |
|