아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

짝수 부분문자열

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

요약
여섯 글자로 이루어진 문자열에서 점 갱신이 주어질 때, 각 구간 질의마다 모든 문자가 짝수 번 등장하는 부분 문자열의 개수를 센다.
난이도

어려움10점 중 9점

유형
세그먼트 트리, 비트 연산, 누적 합, 수학
정답자
아직 제출이 없습니다

문제

알파벳 소문자 a부터 f까지 여섯 글자로 이루어진 문자열 s[1..n]s[1..n]이 주어진다. 부분문자열에 등장하는 서로 다른 모든 글자의 등장 횟수가 짝수이면 그 부분문자열을 짝수라고 부른다. 예를 들어 abbacac에는 짝수 부분문자열이 4개 있다: abba, bb, acac, bbacac. 같은 부분문자열이 서로 다른 위치에 나타나면 각각 따로 센다. 예를 들어 문자열 aaa에는 짝수 부분문자열 aa가 2개 있다.

다음 두 종류의 질의 q개를 처리해야 한다.

  1. 두 정수 l과 r로 주어지는 구간에 대해, s[l]s[l]에서 시작해 s[r]s[r]에서 끝나는 부분문자열 s[l..r]s[l..r]에 있는 짝수 부분문자열의 개수를 센다. 양 끝을 포함한다.
  2. 인덱스 i와 a부터 f까지의 글자 x가 주어지면 s[i]s[i]를 x로 바꾼다.

입력

첫째 줄에 a부터 f까지의 글자로 이루어진 문자열 s[1..n]s[1..n]이 주어진다. (1 ≤ n ≤ 2 · 105)

둘째 줄에 질의의 개수 q가 주어진다. (1 ≤ q ≤ 2 · 105) 다음 q개 줄에 각각 질의가 하나씩 주어진다.

  • 1번 질의는 1 l r로 주어진다. (1 ≤ l ≤ r ≤ n)
  • 2번 질의는 2 i x로 주어진다. (1 ≤ i ≤ n) 여기서 x는 a부터 f까지의 글자이다.

1번 질의는 적어도 하나 있다.

출력

각 1번 질의마다 짝수 부분문자열의 개수를 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    abbacac
    8
    1 1 7
    2 5 a
    1 4 6
    1 1 7
    2 6 b
    1 2 6
    1 5 7
    1 1 1
    
    예상 출력
    4
    2
    6
    4
    0
    0