만드는 중입니다

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

팰린드롬과 쿼리

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

요약
문자열에서 구간을 한 문자로 바꾸는 갱신과, 길이가 K 이하인 회문 부분 문자열의 개수를 구간마다 세는 문제이다.
난이도

어려움10점 중 8점

유형
세그먼트 트리, 문자열, 문자열 매칭, 구현
정답자
아직 제출이 없습니다

문제

문자열 SS와 정수 KK가 주어진다. 다음 두 종류의 쿼리를 처리하는 프로그램을 작성하시오.

  • 1 l r c: S[l..r]S[l..r]의 모든 글자를 문자 cc로 바꾼다.
  • 2 l r: l≤i≤j≤rl \le i \le j \le r이고 j−i+1≤Kj - i + 1 \le K인 쌍 (i,j)(i, j) 중에서 S[i..j]S[i..j]가 팰린드롬인 것의 개수를 출력한다.

문자열의 첫 글자의 인덱스는 11이다. S[i..j]S[i..j]는 SS의 ii번째 글자부터 jj번째 글자까지의 부분 문자열이다.

입력

첫째 줄에 문자열 SS와 정수 KK (1≤K≤501 \le K \le 50)가 공백으로 구분되어 주어진다. SS는 알파벳 소문자로만 이루어져 있고, 길이는 10510^5을 넘지 않는다.

둘째 줄에 쿼리의 개수 MM (1≤M≤1051 \le M \le 10^5)이 주어진다.

셋째 줄부터 MM개의 줄에 쿼리가 한 줄에 하나씩 주어진다. 모든 쿼리에서 1≤l≤r≤∣S∣1 \le l \le r \le |S|이고, 1번 쿼리의 cc는 알파벳 소문자 한 개다.

출력

2번 쿼리마다 그 결과를 한 줄에 하나씩, 입력에 주어진 순서대로 출력한다.

예제2

  1. 예제 1

    입력
    abacaba 4
    3
    2 1 3
    1 1 3 c
    2 1 4
    
    예상 출력
    4
    10
    
  2. 예제 2

    입력
    aabbaa 3
    4
    2 1 6
    1 3 4 a
    2 1 6
    2 2 3
    
    예상 출력
    9
    15
    3