페스트리

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

요약
정수 좌표를 갖는 최대 100,000개의 삼각형과 100,000개의 수직 또는 수평 직선이 주어질 때, 각 직선이 삼각형을 양의 넓이를 가진 두 조각으로 자르는 삼각형의 개수를 구한다.
난이도

보통10점 중 7점

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

문제

한 제과점에서 삼각형 모양의 페스트리 NN개를 구웠다. 모든 페스트리는 2차원 평면 위에서 정수 좌표를 꼭짓점으로 가지는 삼각형으로 나타낼 수 있다.

한 아이가 커다란 칼로 페스트리를 자르려고 한다. 칼질은 항상 세로 방향 직선 x=cx = c 또는 가로 방향 직선 y=cy = c을 따라 이루어진다. 한 번 칼질을 했을 때 총 몇 개의 페스트리가 잘리는지 구하려고 한다. 칼질로 어떤 페스트리가 두 부분으로 나뉘고 두 부분의 넓이가 모두 00보다 크면, 그 페스트리는 잘린 것으로 본다.

페스트리들의 위치와 칼질 목록이 주어졌을 때, 각 칼질이 페스트리를 몇 개 자르는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 페스트리의 개수 NN이 주어진다. (2≤N≤100,0002 \le N \le 100{,}000)

다음 NN개 줄에는 각각 10610^6보다 작은 음이 아닌 정수 여섯 개가 주어진다. 이 수들은 순서대로 (x1,y1)(x_1, y_1), (x2,y2)(x_2, y_2), (x3,y3)(x_3, y_3)이며, 삼각형 페스트리의 세 꼭짓점을 나타낸다. 세 점이 한 직선 위에 있는 경우는 없다. 서로 다른 페스트리는 겹치거나 맞닿을 수 있다.

그다음 줄에는 칼질의 개수 MM이 주어진다. (2≤M≤100,0002 \le M \le 100{,}000)

다음 MM개 줄에는 각각 칼질이 x = c 또는 y = c 형태로 주어진다. 여기서 cc는 10610^6보다 작은 음이 아닌 정수이다.

출력

각 칼질이 자르는 페스트리의 개수를 입력에 주어진 순서대로 한 줄에 하나씩 출력한다. 모든 칼질은 서로 독립적으로 생각한다. 즉, 한 번 칼질을 한 뒤 페스트리는 원래대로 다시 붙는다고 생각하면 된다.

예제2

  1. 예제 1

    입력
    3
    1 0 0 2 2 2
    1 3 3 5 4 0
    5 4 4 5 4 4
    4
    x = 4
    x = 1
    y = 3
    y = 1
    
    예상 출력
    0
    1
    1
    2
    
  2. 예제 2

    입력
    4
    2 7 6 0 0 5
    7 1 7 10 11 11
    5 10 2 9 6 8
    1 9 10 10 4 1
    4
    y = 6
    x = 2
    x = 4
    x = 9
    
    예상 출력
    3
    2
    3
    2