만드는 중입니다

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

북페이스

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

요약
하루 코드 줄 수 n개를 한 줄씩 늘리거나 줄여서, 모든 날의 줄 수 차이가 d 이상이 되도록 하는 최소 시간을 구합니다.
난이도

보통10점 중 6점

유형
정렬, 힙, 그리디
정답자
아직 제출이 없습니다

문제

야심 찬 프로젝트를 맡았는가? 확인. 마감 전에 끝내려고 밤낮없이 쉬지 않고 일하는가? 확인. 코드를 매일 작은 단위로 나누어 커밋하는가? 확인. 이 모든 노력 끝에 Bookface에서 지금까지 가장 야심 찬 소프트웨어 개발자인 당신은 승진을 막을 것이 아무것도 없다고 생각했다. 하지만 크게 틀렸다.

승진 서류를 경영진에게 보내기 전에, 동료 Little Franiu에게 한번 봐 달라고 부탁했다. 한눈에 문제가 보였다. Franiu가 말했다. "Bookface에서는 빨리 움직여야 해요. 빠르게 움직이고 이것저것 바꿔야죠. 매일 비슷한 크기의 커밋을 올리면 예측 가능해지잖아요!"

프로젝트의 nn일 동안 매일 추가한 줄 수를 살펴보니 Franiu의 말에 일리가 있었다. ii일째의 줄 수를 cic_i라고 하자. 모든 cic_i 값이 서로 비슷하게 가까웠다. 다행히 Franiu가 해결 방법을 알려 주었다. 커밋 기록을 고쳐 쓰면 된다는 것이다.

Franiu와 함께 값 dd를 정하고, 임의의 1≤i<j≤n1 \le i < j \le n에 대해 ∣ci−cj∣≥d|c_i - c_j| \ge d가 성립하도록 하기로 했다. 이를 위해 하루를 골라 그날 커밋의 코드 줄을 한 줄 추가하거나 한 줄 삭제할 수 있다. 이 연산은 원하는 만큼 몇 번이든 할 수 있고, 한 번에 1초가 걸린다. 목표를 달성하는 데 몇 초가 필요한가? 커밋의 줄 수는 항상 0 이상이어야 한다.

입력

첫 줄에 테스트 케이스의 개수 zz(1≤z≤1000001 \le z \le 100000)가 주어진다. 각 테스트 케이스는 nn과 dd가 적힌 줄로 시작한다(1≤n≤2000001 \le n \le 200000, 1≤d≤1061 \le d \le 10^6). 다음 줄에는 nn개의 정수 cic_i(0≤ci≤3⋅10110 \le c_i \le 3 \cdot 10^{11})가 주어지며, 이는 ii일째에 추가한 줄 수이다. 모든 테스트 케이스의 총 일수는 10610^6을 넘지 않는다.

출력

각 테스트 케이스마다 목표를 달성하는 데 필요한 초를 나타내는 정수 하나를 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    2
    4 1
    0 0 0 0
    4 10
    1 100 5 10
    
    예상 출력
    6
    16