문제 링크
- http://icpc.me/17082
사용 알고리즘
- 그리디
시간복잡도
- $O((N+Q) log N)$
풀이
모든 $[L_i, R_i]$ 구간을 합한 집합을 $S$라고 하면, 문제에서 요구하는 것은 $L_i$ 와 $R_j$ 를 적절하게 매칭해서 $S$의 최댓값을 최소로 만드는 것입니다.
어떤 놀이에서 $L_i ≤ L_j, R_i ≤ R_j$ 인 $L_i, L_j, R_i, R_j$ 에 대해 $[L_i, R_j], [L_j, R_i]$를 매칭한 경우를 생각해봅시다.
만약 $L_i > R_j$ 혹은 $L_j > R_i$ 라면 정답은 최댓값인 $10^9$가 됩니다.
그렇지 않다면 항상 $[L_i, R_j]$ 구간이 $[L_j, R_i]$ 구간을 포함하고 있습니다.
포함 관계를 풀어서 $[L_i, R_i], [L_j, R_j]$ 로 매칭을 해줘도 손해를 보지는 않고, 오히려 $L_i > R_j$ 혹은 $L_j, R_i$인 상황을 풀어줄 수도 있습니다.
위 사실을 이용해 $[L_i, R_i], [L_j, R_j]$로 매칭하는 것이 최적이라는 것을 Exchange Argument 방식으로 증명할 수 있습니다.
모든 $L_i$들과 $R_i$들을 정렬해준 다음, 작은 것부터 하나씩 매칭해주면 됩니다.
전체 코드
1 |
|