만드는 중입니다

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

문자열

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

요약
각 질의 (i, r)마다 s[i:i+l-1]이 R(s[i+l:i+2l-1])보다 사전순으로 작은 l의 개수를 1부터 r까지 셉니다.
난이도

보통10점 중 7점

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

문제

Little Y는 문자열을 연구하는 대학생이다. Little Y는 다음 정의를 배웠다.

  • 길이가 nn인 문자열 s[1:n]s[1:n]에 대해, 부분 문자열 s[l:r]s[l:r] (1≤l≤r≤n1 \leq l \leq r \leq n)은 s[l],s[l+1],…,s[r]s[l], s[l+1], \dots, s[r]을 순서대로 이어 붙인 문자열이다.
  • 길이가 nn인 문자열 s[1:n]s[1:n]에 대해, R(s)R(s)는 s[n],s[n−1],…,s[1]s[n], s[n-1], \dots, s[1]을 순서대로 이어 붙인 문자열이다. 원래 문자열을 뒤집은 것이다.
  • 길이가 같은 두 문자열 a[1:n]a[1:n], b[1:n]b[1:n]에 대해, aa가 bb보다 사전순으로 작다는 것은 모든 1≤j<i1 \leq j < i에 대해 a[j]=b[j]a[j] = b[j]이고 a[i]<b[i]a[i] < b[i]인 1≤i≤n1 \leq i \leq n이 존재한다는 뜻이다.

문자열 s[1:n]s[1:n]이 주어지고 질의가 qq개 주어진다. 각 질의는 정수 ii와 rr로 이루어진다. 각 질의마다 다음 두 조건을 모두 만족하는 ll의 개수를 구하라.

  • 1≤l≤r1 \leq l \leq r
  • s[i:i+l−1]s[i:i+l-1]이 R(s[i+l:i+2l−1])R(s[i+l:i+2l-1])보다 사전순으로 작다.

입력

첫 줄에 두 정수 cc와 tt가 주어진다. cc는 테스트 케이스 번호이고, tt는 데이터 세트의 수이다. c=0c = 0이면 예제 테스트이다.

각 데이터 세트는 다음과 같이 주어진다.

첫 줄에 문자열의 길이 nn과 질의의 수 qq가 주어진다.

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

이어서 qq개의 줄에 질의 ii와 rr이 각각 주어진다. i+2r−1≤ni+2r-1 \leq n이 보장된다.

출력

각 데이터 세트의 각 질의마다 조건을 만족하는 ll의 개수를 한 줄에 출력한다.

제한

모든 테스트 데이터에 대해 1≤t≤51 \leq t \leq 5, 1≤n≤1051 \leq n \leq 10^5, 1≤q≤1051 \leq q \leq 10^5, 1≤i+2r−1≤n1 \leq i+2r-1 \leq n이다. 문자열 ss는 소문자로만 이루어진다.

예제1

  1. 예제 1

    입력
    0 2
    9 3
    abacababa
    1 4
    2 4
    3 3
    9 3
    abaabaaba
    1 4
    2 4
    3 3
    
    예상 출력
    4
    0
    3
    2
    0
    2