본문 바로가기

알고리즘

IOI16 Aliens

https://oj.uz/problem/view/IOI16_aliens


최대 $k$개의 사진을 찍을 수 있을 때, 모든 흥미로운 위치를 포함하기 위한 최소 영역의 크기를 찾아야 한다.

일단 필요 없는 점을 제거하거나 $x$, $y$좌표가 서로 바뀌어도 동치라는 사실을 바탕으로 $x_i<x_{i+1}$, $y_i<y_{i+1}$, $x_i\leq y_i$를 만족하도록 흥미로운 위치를 정렬한다.



이 문제를 풀때 방해되는 것이 $k$가 사진의 장수를 제한하고 있다는 것이다.

방해되는 $k$를 치우기 위해 $k$값이 변화할 때 cost의 변화를 그려보면 위 그래프와 같이 감소하면서 볼록하다는 것을 관찰할 수 있다.

이 그래프에서 $x$좌표가 $k$값일 때 $y$좌표가 답이 된다.


그러나 아직 그래프의 각 점들의 좌표를 알 수가 없다.

여기서 이상한 생각을 할 수 있는데...

그래프의 접선의 기울기를 주면 (정확히는 접선이 아니지만 접선이라고 하자)

접점의 좌표를 알 수 있다는 것이다.


이것은 접선의 기울기를 $-c$라고 하면 $f(k)+ck$의 최솟값을 구하는 것과 같다.

$f(k)+ck$는 원래 문제에서 사진을 찍는 비용에 $c$원을 추가한 것과 같다.

접점 (k, )는 Convex Hull Trick을 이용하면 $O(n)$에 구할 수 있다.


이제 접선의 기울기가 감소하므로 최소($-m^2$)부터 최대($0$)까지 이분탐색을 통해 $x=k$인 점을 찾을 수 있다.

주의할 점은 여러 점들의 접선의 기울기가 같을 때는 그중 한 점의 좌표만 나온다는 것이다.

시간복잡도는 $O(nlogm)$이다.

'알고리즘' 카테고리의 다른 글

Matroid와 Matroid intersection  (0) 2019.09.05
선형 시간의 Range Minimum Query  (0) 2018.10.25
IOI18 meetings  (1) 2018.10.06
Dynamic Connectivity in Graph  (6) 2017.10.02