만드는 중입니다

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

운석

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

요약
겹치지 않는 건물 직사각형들과 정수 방향으로 떨어지는 유성 점들이 주어질 때, 각 광선이 처음 만나는 건물 번호를 출력하고 없으면 0을 출력한다.
난이도

보통10점 중 7점

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

문제

나로우주센터(NSC)는 우리 도시로 떨어지는 운석 kk개를 관측했다. 센터는 이 운석이 도시의 어느 건물에 충돌하는지 알고 싶다.

먼저 2차원으로 단순화한 문제를 푼다. 도시에는 건물이 nn개 있다. 건물은 모두 아랫변이 xx축에 놓인 직사각형이고, 서로 겹치지 않는다. 즉 서로 다른 두 직사각형은 만나지 않는다. 직사각형에는 1번부터 nn번까지 번호를 붙이고, 1번이 가장 왼쪽에 있다. 1≤i<j≤n1 \le i < j \le n이면 ii번 직사각형이 jj번 직사각형보다 왼쪽에 있다.

건물과 운석

운석은 점으로 나타낸다. 각 운석은 정수 쌍 (dx,dy)(dx, dy)로 나타내는 기울기를 따라 떨어진다. 현재 위치가 (x,y)(x, y)이고 기울기가 (dx,dy)(dx, dy)인 운석은 (x,y)(x, y)와 (x+dx,y+dy)(x + dx, y + dy)를 잇는 직선을 따라 아래로 떨어진다. 위 그림에서 운석 A와 운석 B는 둘 다 3번 건물로 향한다. 운석이 어떤 건물 경계의 한 점에 닿으면 그 즉시 폭발해 사라진다.

건물 nn개와 운석 kk개가 주어질 때, 운석마다 어느 건물이 피해를 입는지 구하는 프로그램을 작성하시오.

입력

프로그램은 표준 입력으로 읽는다. 첫째 줄에 도시의 건물을 나타내는 직사각형의 개수 nn (1≤n≤1000001 \le n \le 100000)이 주어진다. 이어지는 nn개의 줄에 직사각형이 왼쪽에서 오른쪽 순서로 한 줄에 하나씩 주어지고, 주어진 순서대로 1번부터 nn번까지 번호가 붙는다. 각 직사각형은 정수 세 개 x1x_1, x2x_2, hh (1≤x1<x2≤1091 \le x_1 < x_2 \le 10^9, 1≤h<1091 \le h < 10^9)로 주어진다. x1x_1은 왼쪽 변의 xx좌표, x2x_2는 오른쪽 변의 xx좌표, hh는 위쪽 변의 yy좌표다. 모든 직사각형의 아랫변은 xx축에 놓여 있고, 1≤i<j≤n1 \le i < j \le n이면 ii번 직사각형이 jj번 직사각형보다 왼쪽에 있다. 다음 줄에 운석의 개수 kk (1≤k≤1000001 \le k \le 100000)가 주어진다. 이어지는 kk개의 줄에 운석이 한 줄에 하나씩 주어진다. 각 운석은 정수 네 개 xx, yy, dxdx, dydy (1≤x≤1091 \le x \le 10^9, max⁡{h}<y≤109\max\{h\} < y \le 10^9, −1000≤dx≤1000-1000 \le dx \le 1000, −1000≤dy≤−1-1000 \le dy \le -1)로 주어진다. (x,y)(x, y)는 운석의 현재 좌표, (dx,dy)(dx, dy)는 운석이 떨어지는 직선의 기울기이고, max⁡{h}\max\{h\}는 건물 위쪽 변의 yy좌표 중 가장 큰 값이다.

출력

프로그램은 표준 출력으로 쓴다. 운석마다 입력에 주어진 순서대로 정확히 한 줄씩 출력한다. 각 줄에는 그 운석이 충돌하는 건물의 번호를 출력한다. 피해를 입는 건물이 없으면 0을 출력한다.

예제2

  1. 예제 1

    입력
    5
    5 9 4
    10 12 12
    13 20 8
    22 24 5
    25 30 12
    2
    7 20 3 -4
    27 20 -3 -7
    
    예상 출력
    3
    3
    
  2. 예제 2

    입력
    4
    10 12 6
    13 20 15
    22 24 2
    25 30 9
    4
    21 18 0 -2
    27 20 3 -5
    11 20 20 -15
    6 20 1 -5
    
    예상 출력
    0
    0
    2
    1