문제 링크
- http://icpc.me/16670
문제 출처
- 2018 NEERC K번
사용 알고리즘
- Segment Tree
시간복잡도
- O(Q log N)
풀이
세그먼트 트리의 노드를 아래와 같이 정의해봅시다.
1 |
|
sum은 양쪽 자식의 소요시간의 합, max는 양쪽 자식의 작업이 끝나는 시간을 나타냅니다.
두 개의 노드를 합치는(부모 노드의 결과를 뽑아내는) 코드는 아래와 같이 짤 수 있습니다.
1 |
|
sum은 단순히 구해주면 되고, max는 오른쪽 자식의 작업이 끝나는 시간과, 왼쪽 자식의 작업을 끝내고 오른쪽 자식의 작업을 수행하는 시간 중 최댓값을 취해주면 됩니다.
이 부분만 알고 있다면 어렵지 않게 구현할 수 있습니다.
전체 코드
1 |
|