문자열 접기 (Hard)

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

요약
각 질의 부분 문자열마다 종이를 한 번 접었을 때 맞닿는 같은 문자 쌍의 최대 개수를 구한다.
난이도

어려움10점 중 8점

유형
동적 계획법, 문자열, 누적 합, 구현
정답자
아직 제출이 없습니다

문제

기다란 종이에 알파벳 대문자로만 이루어진 문자열이 한 줄로 쓰여 있다. 예를 들어 아래 그림과 같이 종이에 “ABAACA”가 쓰여 있다고 가정하자.

이제 이 종이를 한 번만 접을 것이다. 종이는 서로 이웃한 문자 사이에서만 접을 수 있다. 예를 들어 아래 그림과 같이 위 종이를 44번째 문자와 55번째 문자 사이에서 접을 수 있다.

이때 서로 맞닿은 문자 쌍 중에서, 서로 같은 문자가 맞닿은 쌍의 개수가 이 접기의 점수가 된다. 예를 들어 앞에서의 접기의 점수는 11점이 된다. 하지만 아래 그림과 같이 33번째 문자와 44번째 문자 사이에서 종이를 접으면 점수는 22점이 된다.

이제 여러분은 알파벳 대문자로만 이루어진 문자열 SS가 주어질 때, 다음과 같은 질문 QQ개에 답해야 한다.

  • l rl \ r: 문자열 SS의 ll번째 문자, (l+1)\left( l+1 \right)번째 문자, ⋯\cdots, rr번째 문자가 차례대로 종이에 쓰여 있을 때, 종이를 한 번 접어서 얻을 수 있는 최대의 점수는 몇 점인가?

입력

첫 번째 줄에 문자열의 길이를 나타내는 정수 NN이 주어진다.

두 번째 줄에 알파벳 대문자로만 이루어진 문자열 SS가 주어진다.

세 번째 줄에 정수 QQ가 주어진다.

네 번째 줄부터 QQ개 줄에 걸쳐 위에서 설명한 질문을 나타내는 정수 ll, rr이 공백으로 구분되어 주어진다.

출력

각 질문의 답을 나타내는 정수를 순서대로 한 줄에 하나씩 출력한다.

제한

  • 2≤N≤5,0002 \le N \le 5{,}000
  • 1≤Q≤200,0001 \le Q \le 200{,}000
  • 1≤l<r≤N1 \le l \lt r \le N

예제2

  1. 예제 1

    입력
    6
    ABAACA
    4
    1 4
    2 5
    3 6
    1 6
    
    예상 출력
    1
    1
    1
    2
    
  2. 예제 2

    입력
    5
    ABBAB
    4
    1 5
    1 4
    2 5
    3 5
    
    예상 출력
    2
    2
    1
    0