폴리라인 단순화

삼각형 넓이가 가장 작은 내부 점을 원래 인덱스가 작은 쪽부터 제거하며 각 단계의 인덱스를 출력한다.

보통7연결 리스트시뮬레이션기하아직 제출이 없습니다시간 제한5초메모리 제한512 MB

문제

지도 애플리케이션은 나라나 도시의 경계를 선분을 이어 붙인 폴리라인으로 나타낸다. 사용자가 지도를 확대하면 세밀한 부분까지 보여야 하므로 이런 폴리라인은 선분이 아주 많다. 반대로 축소하면 세밀한 부분은 중요하지 않고, 선분이 그렇게 많은 폴리라인을 처리하고 그리는 것은 낭비다. 이 문제에서는 원래 폴리라인을 선분이 더 적은 폴리라인으로 근사하는 폴리라인 단순화 알고리즘을 다룬다.

선분이 nn개인 폴리라인은 점 n+1n + 1p0=(x0,y0),,pn=(xn,yn)p_0 = (x_0, y_0), \dots, p_n = (x_n, y_n)으로 나타내고, ii번째 선분은 pi1p_{i-1}pip_i를 잇는다. 내부 점 pip_i (1in11 \le i \le n - 1)를 지우면 선분 pi1pip_{i-1}p_ipipi+1p_i p_{i+1}이 선분 pi1pi+1p_{i-1}p_{i+1} 하나로 바뀌면서 폴리라인이 단순해진다. 지울 점은 이렇게 고른다. 내부 점 pip_i마다 pi1p_{i-1}, pip_i, pi+1p_{i+1}이 이루는 삼각형의 넓이를 구하고(세 점이 한 직선 위에 있으면 넓이는 00이다), 그 넓이가 가장 작은 점을 지운다. 넓이가 가장 작은 점이 여럿이면 원래 폴리라인에서 번호가 가장 작은 점을 지운다. 남은 폴리라인에 같은 규칙을 다시 적용해서, 선분이 원하는 개수인 mm개가 될 때까지 되풀이한다.

아래 그림은 한 단계를 보여 준다.

맨 위가 원래 폴리라인이다. 가운데에서는 p2p_2, p3p_3, p4p_4가 이루는 삼각형의 넓이를 재고, 이 넓이가 모든 삼각형 중에서 가장 작으면 p3p_3을 지운다. 맨 아래가 p3p_3을 지운 뒤의 폴리라인이다.

입력

첫째 줄에 정수 nn (2n2000002 \le n \le 200\,000)과 mm (1m<n1 \le m < n)이 주어진다. 이어지는 n+1n + 1개의 줄에 p0p_0부터 pnp_n까지가 차례대로 주어진다. 각 줄에는 점의 xx 좌표와 yy 좌표가 주어지고, 두 값 모두 5000-5000 이상 50005000 이하의 정수다. 주어지는 점은 사전순으로 엄격하게 증가한다. 즉 모든 0i<n0 \le i < n에 대해 xi<xi+1x_i < x_{i+1}이거나, xi=xi+1x_i = x_{i+1}이면서 yi<yi+1y_i < y_{i+1}이다.

출력

nmn - m개의 줄을 출력한다. kk번째 줄에는 위 알고리즘의 kk번째 단계에서 지운 점의 번호를 출력한다. 번호는 원래 폴리라인에서의 번호를 쓴다.