만드는 중입니다

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

가장 왼쪽 선분

시간 제한1초메모리 제한512 MB

요약
두 수평선을 잇는 n개의 선분이 주어질 때, 각 수평 질의선과 가장 왼쪽에서 만나는 선분을 찾고 교차점이 겹치면 위쪽 끝점이 더 왼쪽인 선분을 답한다.
난이도

어려움10점 중 8점

유형
정렬, 이분 탐색, 기하, 구현
정답자
아직 제출이 없습니다

문제

xy 좌표평면에 서로 다른 두 수평선 hupperh_{upper}와 hlowerh_{lower}가 있고, 이 두 직선을 잇는 선분이 nn개 있다. 각 선분은 한 끝점이 hupperh_{upper} 위에, 다른 끝점이 hlowerh_{lower} 위에 있다. 선분의 끝점은 모두 다르다. 선분에는 11번부터 nn번까지 번호가 붙어 있다.

질의로는 hupperh_{upper}와 hlowerh_{lower} 사이에 놓인 수평선 hih_i가 주어진다. 이 직선은 모든 선분과 반드시 만난다. 질의마다 가장 왼쪽에서 만나는 선분을 찾아야 한다. 선분 두 개 이상이 한 점에서 만날 수 있으므로, 질의 직선과의 가장 왼쪽 교점을 여러 선분이 함께 지날 수 있다. 이때는 hupperh_{upper} 위의 끝점이 가장 왼쪽에 있는 선분을 답으로 한다.

예를 들어 아래 그림처럼 선분 5개와 질의 직선 3개가 주어졌다고 하자. y=2.0y = 2.0인 질의 직선과 가장 왼쪽에서 만나는 선분은 2번이고, y=4.0y = 4.0인 질의 직선에 대해서는 3번이다. y=6.25y = 6.25인 질의 직선은 3번 선분과 4번 선분의 교점을 지나므로, 위 규칙에 따라 답은 4번이다.

두 수평선을 잇는 선분 nn개와 질의 mm개가 주어질 때, 각 질의 직선과 가장 왼쪽에서 만나는 선분을 찾는 프로그램을 작성하시오.

선분 두 개 이상이 한 점에서 만날 수 있다는 점에 주의한다. 컴퓨터가 실수를 표현하는 방식에서 생기는 반올림 오차도 조심해야 한다.

입력

첫째 줄에 두 정수 maxYmaxY와 minYminY가 주어진다 (−1000≤minY<maxY≤1000-1000 \le minY < maxY \le 1000). maxYmaxY는 위쪽 수평선의 yy좌표, minYminY는 아래쪽 수평선의 yy좌표이다.

둘째 줄에 두 수평선을 잇는 선분의 개수 nn이 주어진다 (1≤n≤1000001 \le n \le 100000). 선분에는 입력에 주어진 순서대로 11번부터 nn번까지 번호가 붙는다.

이어지는 nn개 줄에는 각 선분의 위쪽 끝점 xx좌표 upperXupperX와 아래쪽 끝점 xx좌표 lowXlowX가 주어진다 (−500000≤upperX,lowX≤500000-500000 \le upperX, lowX \le 500000). 끝점은 모두 다르다.

다음 줄에 질의의 개수 mm이 주어진다 (1≤m≤1000001 \le m \le 100000). 이어지는 mm개 줄에는 질의 수평선의 yy좌표가 한 줄에 하나씩 주어진다. 이 값은 minYminY보다 크고 maxYmaxY보다 작은 실수이며, 소수점 아래 자릿수는 1자리 이상 3자리 이하이다.

출력

질의마다 한 줄씩, 입력에 주어진 순서대로 출력한다. 각 줄에는 그 질의 수평선과 가장 왼쪽에서 만나는 선분의 번호를 출력한다.

예제3

  1. 예제 1

    입력
    10 0
    5
    5 12
    9 0
    4 3
    1 8
    12 9
    3
    6.25
    4.0
    2.0
    
    예상 출력
    4
    3
    2
    
  2. 예제 2

    입력
    5 -5
    4
    0 0
    1 1
    2 2
    3 4
    3
    0.0
    2.05
    -3.275
    
    예상 출력
    1
    1
    1
    
  3. 예제 3

    입력
    3 0
    3
    6 7
    8 5
    2 11
    3
    1.0
    1.499
    1.501
    
    예상 출력
    2
    2
    3