만드는 중입니다

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

일이 이어져야 좋다

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

요약
정수 N이 주어질 때 각 질의 (i, j, k)마다 S_N[i..j]에서 0을 최대 k개 포함하는 가장 긴 부분 문자열의 길이를 구합니다.
난이도

보통10점 중 7점

유형
분할 정복, 문자열, 재귀
정답자
아직 제출이 없습니다

문제

양의 정수 NN으로 문자열 SNS_N을 다음과 같이 정의한다. ⌊N/2⌋\lfloor N/2 \rfloor은 NN을 2로 나눈 몫이다.

  1. N=1N = 1인 경우, SNS_N은 1 한 글자로 이루어진 문자열이다.
  2. N≥2N \ge 2이고 NN이 짝수인 경우, SN=S⌊N/2⌋0S⌊N/2⌋S_N = S_{\lfloor N/2 \rfloor}0S_{\lfloor N/2 \rfloor}이다. 즉 0 한 글자 좌우에 S⌊N/2⌋S_{\lfloor N/2 \rfloor}가 이어진 문자열이다.
  3. N≥2N \ge 2이고 NN이 홀수인 경우, SN=S⌊N/2⌋1S⌊N/2⌋S_N = S_{\lfloor N/2 \rfloor}1S_{\lfloor N/2 \rfloor}이다. 즉 1 한 글자 좌우에 S⌊N/2⌋S_{\lfloor N/2 \rfloor}가 이어진 문자열이다.

S13S_{13}은 다음과 같이 만들어진다.

  • 3번 규칙이 적용되므로 S13=S61S6S_{13} = S_6 1 S_6이다.
  • 2번 규칙에 따라 S6S_6은 S30S3S_3 0 S_3이 되므로 S13=S30S31S30S3S_{13} = S_3 0 S_3 1 S_3 0 S_3이다.
  • 3번 규칙과 1번 규칙을 차례로 적용하면 S3=111S_3 = 111이 된다.
  • 따라서 S13=111011111110111S_{13} = 111011111110111이다.

양의 정수 NN이 주어질 때, 다음 형태의 질의 QQ개를 해결하는 프로그램을 작성하라. qq번째 질의는 정수 세 개 (iq,jq,kq)(i_q, j_q, k_q)가 주어진다. 이때 SN[iq..jq]S_N[i_q..j_q]에서 0을 최대 kqk_q개까지 포함하는 부분문자열 중 가장 긴 것의 길이를 구한다.

질의 (1,15,0)(1, 15, 0)이면 0을 포함하지 않는 부분문자열을 찾아야 하므로 답은 7이다. 질의 (2,14,2)(2, 14, 2)이면 S13[2..14]=1101111111011S_{13}[2..14] = 1101111111011에는 0이 2개뿐이므로 구간 전체가 답이 되고, 그 길이는 13이다.

입력

첫 번째 줄에 정수 NN과 QQ가 주어진다. 다음 QQ개의 줄에는 각각 iqi_q, jqj_q, kqk_q가 공백 하나씩을 사이에 두고 주어진다.

출력

각 질의에 대한 답을 주어진 순서대로 한 줄에 하나씩 출력한다.

제한

1≤N≤10181 \le N \le 10^{18}

1≤Q≤10 0001 \le Q \le 10\,000

모든 질의의 kqk_q를 더하면 10 00010\,000을 넘지 않는다.

모든 1≤q≤Q1 \le q \le Q에 대해 1≤iq≤jq≤1 \le i_q \le j_q \le (SNS_N의 길이)이다.

힌트

길이 ll인 문자열 ss와 1≤i≤j≤l1 \le i \le j \le l인 정수 ii, jj에 대해, s[i..j]s[i..j]는 ss의 ii번째 문자부터 jj번째 문자까지를 순서대로 포함하는 문자열이다. 이러한 문자열을 ss의 부분문자열이라고 한다.

예를 들어 ss가 0100101이라면, s[3..5]s[3..5]는 001이고 s[4..7]s[4..7]은 0101이다. 따라서 001과 0101은 0100101의 부분문자열이지만, 1010은 부분문자열이 아니다.

예제1

  1. 예제 1

    입력
    13 3
    1 15 0
    2 14 2
    2 8 0
    
    예상 출력
    7
    13
    4