만드는 중입니다

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

호반우가 학교에 지각한 이유 8

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

요약
원점에서 행성 N까지 가는 최소 시간을 구합니다. 행성 e로 갈 때 출발점이 0번부터 e번까지 행성의 볼록 다각형 경계에 있으면 a_e, 아니면 b_e가 듭니다.
난이도

어려움10점 중 9점

유형
동적 계획법, 기하, 분할 정복
정답자
아직 제출이 없습니다

문제

이제 호반우는 그리운 경북대학교로 돌아가려고 한다. 그러나 문제가 하나 있다. 지구에서 이세계로 오는 것은 쉬워도, 이세계에서 지구로 돌아가는 것은 어렵다.

2차원 좌표평면으로 나타낼 수 있는 우주에는 이세계를 제외한 NN개의 행성이 있다. xx값이 작은 순서대로 1번 행성, 2번 행성, ..., NN번 행성이라고 부른다.

1≤i≤N1 \le i \le N인 ii에 대해 ii번 행성은 1사분면 위에 있는 정수 좌표 (xi,yi)(x_i, y_i)에 있고, 양의 정수 aia_i, bib_i를 가진다.

처음에 호반우는 이세계이자 0번 행성의 위치인 (0,0)(0, 0)에 있다. 호반우는 여러 행성을 거쳐 지구로 돌아가는 차원문이 있는 NN번 행성에 가려고 한다.

호반우는 한 번의 이동에 MM개의 행성을 지나칠 수 있다. 정확히는, 호반우가 ss번 행성에 있을 때 ee번 행성으로 이동하려면 s≤e≤s+Ms \le e \le s+M을 만족해야 한다. 이때 이동 시간은 0번부터 ee번까지의 행성들을 모두 포함하는 가장 작은 볼록 다각형을 만들었을 때, ss번 행성이 볼록 다각형 경계에 위치하면 aea_e, 그렇지 않으면 beb_e이다. 직선도 볼록 다각형으로 본다.

이세계에서 NN번 행성까지 빠르게 도착해서 호반우가 학교에 지각하지 않도록 도와주자!

입력

첫 번째 줄에 테스트 케이스의 개수 TT가 주어진다. (1≤T≤60 0001 \le T \le 60\,000)

각 테스트 케이스의 첫 번째 줄에는 공백을 두고 NN과 MM이 주어진다. (1≤M≤N≤300 0001 \le M \le N \le 300\,000)

두 번째 줄부터 NN개의 줄에 걸쳐 공백을 두고 xix_i, yiy_i, aia_i, bib_i가 주어진다. (1≤xi,yi,ai,bi≤1091 \le x_i, y_i, a_i, b_i \le 10^9)

모든 테스트 케이스에 대하여 항상 x1<x2<⋯<xNx_1 < x_2 < \cdots < x_N을 만족한다.

모든 테스트 케이스의 NN의 합은 300 000300\,000을 넘지 않는다.

출력

각 테스트 케이스마다 호반우가 이세계에서 출발해 NN번 행성에 도착하기까지 걸리는 시간의 최솟값을 출력한다.

힌트

입출력의 양이 많으므로 빠른 입출력을 사용하는 것을 권장한다. 언어별 빠른 입출력은 아래를 참고한다.

  • C++: cin, cout을 사용하는 경우 입출력 전에 cin.tie(nullptr); ios::sync_with_stdio(false);를 한 번 적용해야 한다. 줄 바꿈할 때는 endl 대신 '\n'을 사용해야 한다.
  • Java: BufferedReader와 BufferedWriter를 사용해야 한다.
  • Python3, PyPy3: input() 대신 sys.stdin.readline().rstrip()을 사용해야 한다.

예제1

  1. 예제 1

    입력
    3
    2 1
    1 2 3 1
    2 3 2 1
    3 2
    1 2 2 2
    7 3 1 1
    12 9 3 4
    4 2
    2 5 2 6
    6 4 7 3
    11 6 9 1
    17 7 4 9
    
    예상 출력
    5
    4
    16