문제 링크
- http://icpc.me/3323
문제 출처
- 2009 CEOI Day2 3번
사용 알고리즘
- 세그먼트 트리
- 볼록 껍질
- 삼분 탐색 / 파라메트릭 서치
시간복잡도
- $O(N \log N + Q \log^2 N)$
풀이
각도 범위 안에 있는 점들 중, 주어진 선분 아래에 점이 있는지 판별하면 됩니다.
각도 제한이 없고, 선분이 아닌 직선이 주어지는 문제를 먼저 풀어봅시다.
점들의 Convex Hull을 구한 뒤, 삼분탐색을 통해서 찾은 가장 아래에 있는 점(직선 위의 임의의 두 점을 잡았을 때, Signed Area을 최대화하는 점)을 찾아서 직선 아래에 있는지 판별하면 됩니다.
각도 제한이 있어도 비슷하게 문제를 풀 수 있습니다. 주어진 모든 점의 Convex Hull을 구하는 것 대신, 각도 범위 안에 있는 점들로만 Convex Hull을 구하면 됩니다.
주어진 점을 각도 순으로 정렬한 다음, Convex Hull을 관리하는 Segment Tree를 만들면 효율적으로 판별할 수 있습니다.
전체 코드
1 |
|