만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

구슬 레일 만들기

시간 제한4초메모리 제한2048 MB

요약
수직이 아닌 세그먼트 n개가 우선순위 순서로 주어집니다. 앞에서부터 훑으며 이미 고른 세그먼트와 교차하지 않는 것만 골라 그 번호를 출력합니다.
난이도

어려움10점 중 8점

유형
기하, 그리디, 세그먼트 트리
정답자
아직 제출이 없습니다

문제

조나단은 구슬이 굴러갈 레일을 벽에 달아 가지고 놀고 싶어 한다. 각 레일은 한쪽에 구슬이 굴러갈 작은 홈이 파인 직선형 플라스틱이다. 어떻게 달고 싶은지 묻자, 그는 15분 동안 크레용으로 설계도를 그렸다. 당신은 내부의 한 점에서 교차하는 두 레일은 만들 수 없다고 알려 준다. 조나단은 잠시 생각한 뒤 설계도를 고쳤다. 하지만 충돌을 해결하지 않고, 모든 레일에 1번(가장 좋아하는 것)부터 nn번(가장 싫어하는 것)까지 번호만 붙였다.

첫 번째 샘플(원래 설계도).

어떤 레일을 만들지 정해야 한다. 조나단이 가장 좋아하는 레일부터 가장 싫어하는 레일 순서로 살펴보며, 이미 벽에 달아 둔 레일과 교차하지 않는 경우에만 그 레일을 만든다.

입력

첫 줄에 설계도에 있는 구슬 레일의 개수 정수 nn(1≤n≤6⋅1041 \leq n \leq 6 \cdot 10^4)이 주어진다.

이어서 nn개의 줄에 정수 네 개 x1x_1, y1y_1, x2x_2, y2y_2(−105≤x1,y1,x2,y2≤105-10^5 \leq x_1, y_1, x_2, y_2 \leq 10^5, x1≠x2x_1 \neq x_2)가 주어진다. 설계도에서 (x1,y1)(x_1, y_1)에서 (x2,y2)(x_2, y_2)까지 이어지는 레일을 나타낸다.

레일은 좋아하는 순서대로 주어진다. 서로 다른 두 레일은 많아야 한 점에서 교차한다.

출력

첫 줄에 만들 레일의 개수 kk를 출력한다. 다음 줄에는 그 레일들의 번호를 오름차순으로 kk개 출력한다.

힌트

눈치챘을 수도 있지만, 입력 형식은 각 레일에 대해 x1≠x2x_1 \neq x_2를 명시한다. 구슬은 수직 레일을 따라 굴러갈 수 없기 때문이다.

예제3

  1. 예제 1

    입력
    6
    3 2 5 4
    0 4 4 0
    2 1 6 1
    5 4 7 2
    0 3 5 3
    4 2 6 0
    
    예상 출력
    4
    1 2 4 6
    
  2. 예제 2

    입력
    2
    0 0 2 2
    1 1 2 0
    
    예상 출력
    2
    1 2
    
  3. 예제 3

    입력
    10
    -30428 50667 -18028 82591
    -19828 85240 -16439 54314
    -16439 54314 -13911 33099
    -18028 82591 -13739 13271
    -13911 33099 -11978 -46941
    -13739 13271 14783 13050
    -11978 -46941 35511 -79125
    35511 -79125 35524 -89845
    35524 -89845 67295 -41898
    14783 13050 72720 -67171
    
    예상 출력
    6
    1 3 5 7 8 9