만드는 중입니다

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

클라우드 리테이너의 게임

시간 제한2초메모리 제한1024 MB

요약
나무 판 일부를 제거해서 y=0과 y=H 사이를 튕기는 공이 모을 수 있는 코인 수의 최댓값을 구합니다.
난이도

어려움10점 중 9점

유형
동적 계획법, 세그먼트 트리, 정렬
정답자
아직 제출이 없습니다

문제

Qingyun Peak 위 구름 속 거처(Dwelling)를 만든 Cloud Retainer는 역학에 깊은 관심이 있다. 리월의 등불 축제까지는 한 달이 넘게 남았지만, 그녀는 이미 이 축제를 위한 게임 이벤트 설계를 시작했다.

Cloud Retainer와 여행자

이 게임의 핵심은 공을 발사해 점수를 최대한 높이는 것이다. 게임은 두 수평선 y=0y = 0과 y=Hy = H 사이의 2차원 평면에서 진행된다. 두 선 사이에는 nn개의 작은 나무 판자와 mm개의 동전이 있으며, 둘 다 한 점으로 본다. ii번째 나무 판자는 (xi,yi)(x_i, y_i)에, ii번째 동전은 (xi′,yi′)(x'_i, y'_i)에 있다.

플레이어는 (10−9,10−9)(10^{-9}, 10^{-9})에서 공을 발사한다. v→=(vx,vy)\overrightarrow{v} = (v_x, v_y)를 공의 속도라고 하자. 공이 (x,y)(x, y)에 있으면 ϵ\epsilon초 뒤에 (x+vxϵ,y+vyϵ)(x + v_x\epsilon, y + v_y\epsilon)로 이동한다. 처음 속도는 v→=(1,1)\overrightarrow{v} = (1, 1)이다.

공이 나무 판자나 두 수평선 중 하나에 부딪히면 vyv_y의 부호가 바뀌고 vxv_x는 그대로다. 공이 동전에 부딪히면 점수가 1 오르고 속도는 변하지 않는다.

플레이어는 발사 전에 나무 판자를 원하는 만큼 제거할 수 있다. 하나도 제거하지 않아도 된다. 클라우드 리테이너는 이 게임의 난이도를 가늠하고 싶어 한다. 최적의 전략을 쓸 때 101010101010^{10^{10^{10^{10}}}}초가 지난 뒤 플레이어가 얻을 수 있는 최대 점수를 구하시오.

입력

첫 줄에 테스트 케이스의 수 TT가 주어진다. 각 테스트 케이스는 다음 형식이다.

첫 줄에 HH (2≤H≤1092 \le H \le 10^9)가 주어진다.

둘째 줄에 나무 판자의 수 nn (1≤n≤1051 \le n \le 10^5)이 주어진다. 이어서 nn개의 줄에 ii번째 나무 판자의 좌표 xix_i, yiy_i (1≤xi≤1091 \le x_i \le 10^9, 1≤yi<H1 \le y_i < H)가 한 줄에 하나씩 주어진다.

다음 줄에 동전의 수 mm (1≤m≤1051 \le m \le 10^5)이 주어진다. 이어서 mm개의 줄에 ii번째 동전의 좌표 xi′x'_i, yi′y'_i (1≤xi′≤1091 \le x'_i \le 10^9, 1≤yi′<H1 \le y'_i < H)가 한 줄에 하나씩 주어진다.

한 테스트 케이스의 n+mn + m개의 점은 모두 서로 다르다. 모든 테스트 케이스에 걸친 nn의 합과 mm의 합은 각각 5×1055 \times 10^5을 넘지 않는다.

출력

각 테스트 케이스마다 나무 판자를 일부 제거하거나 하나도 제거하지 않았을 때 얻을 수 있는 최대 점수를 한 줄에 출력한다.

힌트

아래 그림은 테스트 케이스 두 개를 보여 준다. 채워진 다이아몬드는 남은 나무 판자, 빈 다이아몬드는 제거된 나무 판자, 원형 점은 동전이다.

테스트 케이스 1테스트 케이스 2

예제1

  1. 예제 1

    입력
    2
    4
    3
    1 1
    2 2
    6 2
    4
    3 1
    3 3
    5 1
    7 3
    3
    1
    4 2
    3
    1 1
    6 2
    9 1
    
    예상 출력
    3
    3