만드는 중입니다

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

연속 풀이 일수

면접 대비

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

요약
문제 해결 시각과 하루 길이 m이 주어질 때, 시간대 이동값 t(0 이상 m 미만)를 골라 문제를 푼 날이 연속으로 이어지는 최대 길이를 구합니다.
난이도

보통10점 중 6점

유형
투 포인터, 정렬, 수학
정답자
아직 제출이 없습니다

문제

최근 경쟁 프로그래밍 사이트 Deltaforces가 사용자 프로필에 새로운 시각 정보를 많이 추가했다. 그중 하나가 최대 연속 일수이며, 적어도 한 문제를 푼 날이 연속으로 이어지는 최대 일수다. 프로필에 표시된 최대 연속 일수가 실제 훈련량을 잘 반영하지 못해서, 시간대를 바꾸면 연속 일수를 늘릴 수 있는지 생각해 본다.

nn을 푼 문제 수, ii번째 문제를 푼 시각을 aia_i라고 하자. 시간대는 00부터 m−1m-1까지 mm개가 있다. 기본 시간대는 00이다. 시간대를 tt로 바꾸면 모든 타임스탬프가 동시에 tt만큼 증가한다. 즉 시각 aia_i에 푼 문제는 모든 ii에 대해 시각 ai+ta_i + t에 푼 것으로 간주된다.

시각 xx에 푼 문제는 ⌊xm⌋\lfloor \frac{x}{m} \rfloor번째 날에 센다. 여기서 ⌊v⌋\lfloor v \rfloor는 vv보다 작거나 같은 가장 큰 정수다.

연속 일수를 표시하기 위해 Deltaforces는 ll과 rr을 찾는다. 각 날 l,l+1,…,rl, l+1, \ldots, r에 적어도 한 문제를 풀었고, r−l+1r-l+1이 가능한 한 커야 한다. 그러면 최대 연속 일수는 r−l+1r-l+1로 표시된다.

시간대를 골라서 달성할 수 있는 최대 연속 일수를 구하라.

입력

첫 줄에 테스트 케이스의 수 tt (1≤t≤2⋅1051 \le t \le 2 \cdot 10^5)가 주어진다. 각 테스트 케이스가 이어진다.

각 테스트 케이스의 첫 줄에는 두 정수 nn과 mm이 주어진다. 각각 푼 문제 수와 시간대의 수다 (1≤n≤2⋅1051 \le n \le 2 \cdot 10^5; 1≤m≤1091 \le m \le 10^9).

둘째 줄에는 nn개의 정수 a1,a2,…,ana_1, a_2, \ldots, a_n이 주어진다. 서로 다른 제출 시각이며 시간순으로 주어진다 (0≤a1<a2<⋯<an≤1090 \le a_1 < a_2 < \dotsb < a_n \le 10^9).

모든 테스트 케이스의 nn 합은 2⋅1052 \cdot 10^5을 넘지 않는다.

출력

각 테스트 케이스마다 최대 연속 일수 ss와 그것을 달성하는 시간대 tt를 두 정수로 출력한다 (1≤s≤n1 \le s \le n; 0≤t<m0 \le t < m). 답이 여럿이면 그중 아무거나 출력하면 된다.

힌트

첫 번째 예제에서 시간대 22를 고르면 타임스탬프가 2,5,10,262, 5, 10, 26으로 바뀐다. 이는 날 0,0,1,20, 0, 1, 2에 해당하며 3일 연속이다. 시간대 33, 44, 55도 같은 답을 준다.

두 번째 예제에서 시간대 55를 고르면 타임스탬프가 3737과 4040이 되어 날 33과 44에 해당한다. 시간대 66과 77도 가능하다.

세 번째 예제에는 시간대가 하나뿐이며, 최대 연속 일수는 55다.

네 번째 예제에서는 많은 문제를 짧은 기간에 풀었기 때문에 22일 연속을 넘을 수 없다.

예제1

  1. 예제 1

    입력
    5
    4 10
    0 3 8 24
    2 10
    32 35
    10 1
    0 1 3 4 5 6 7 10 11 12
    10 24
    0 1 3 4 5 6 7 10 11 12
    8 24
    26 71 101 147 181 201 244 268
    
    예상 출력
    3 2
    2 5
    5 0
    2 12
    4 15