만드는 중입니다

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

아기의 첫 접미사 배열 문제

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

요약
각 질의마다 부분 문자열 x = s[l..r]의 접미사 중 s[k..r]보다 사전순으로 작거나 같은 접미사의 개수를 구합니다.
난이도

어려움10점 중 8점

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

문제

길이가 nn인 문자열 ss의 접미사 배열은 11부터 nn까지의 정수로 이루어진 순열 sasa이며, s[sa1..n],s[sa2..n],…,s[san..n]s[sa_1..n], s[sa_2..n], \dots, s[sa_n..n]이 ss의 공백이 아닌 모든 접미사를 사전순으로 정렬한 목록이 되도록 하는 것이다. ss의 접미사에 대한 순위 표는 11부터 nn까지의 정수로 이루어진 순열 rankrank이며, ranksai=irank_{sa_i} = i를 만족한다.

코토리에게 문자열 s=s1s2…sns = s_1s_2\dots s_n이 있다. 그녀는 mm개의 질의를 하려고 한다. ii번째 질의에서는 ss의 부분 문자열 x=s[li..ri]x = s[l_i..r_i]가 주어지고, 코토리는 xx에서 접미사 s[ki..ri]s[k_i..r_i]의 순위를 알고 싶어 한다.

s[l..r]s[l..r]은 ss의 ll번째 위치에서 시작해 rr번째 위치에서 끝나는 부분 문자열을 뜻하며, 양 끝을 모두 포함한다.

입력

여러 개의 테스트 케이스가 주어진다. 입력의 첫 줄에는 테스트 케이스의 개수 TT가 주어진다. 각 테스트 케이스는 다음과 같다.

첫 줄에는 문자열의 길이 nn과 질의의 개수 mm이 주어진다 (1≤n,m≤5×1041 \le n, m \le 5 \times 10^4).

둘째 줄에는 영어 소문자로만 이루어진 길이 nn의 문자열 ss가 주어진다.

이어지는 mm개의 줄에는 각각 세 정수 lil_i, rir_i, kik_i가 주어지며 (1≤li≤ri≤n1 \le l_i \le r_i \le n, li≤ki≤ril_i \le k_i \le r_i), 이는 하나의 질의를 나타낸다.

모든 테스트 케이스의 nn 합과 mm 합은 각각 5×1045 \times 10^4을 넘지 않는다.

출력

각 질의마다 답을 한 줄에 정수 하나로 출력한다.

예제1

  1. 예제 1

    입력
    2
    10 4
    baaabbabba
    2 8 3
    1 1 1
    2 3 2
    2 5 4
    20 3
    cccbccbadaacbbbcccab
    14 17 16
    3 20 17
    17 20 18
    
    예상 출력
    2
    1
    2
    3
    4
    15
    3