imeimi's Blog

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(n\log m)이다.

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다