만드는 중입니다

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

작은 문자열 개수 세기

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

요약
문자열 집합 D와 문자열 s가 주어집니다. s의 k번째 위치부터 끝까지를 한 문자로 바꾸는 갱신마다 D에서 s보다 사전순으로 작은 문자열의 개수를 구합니다.
난이도

어려움10점 중 8점

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

문제

nn개의 문자열로 이루어진 집합 DD와 문자열 ss가 주어진다. DD에 있는 문자열 중 사전순으로 ss보다 작은 문자열의 개수를 구하라.

문자열 ss는 qq번 수정된다. 각 수정은 정수 kik_i와 문자 cic_i의 쌍으로 주어진다. 수정 (ki,ci)(k_i, c_i)는 ss의 kik_i번째 문자부터 끝까지 모든 문자를 cic_i로 바꾼다.

예를 들어 초기 문자열이 anatoly이고 수정 (5,o)(5, \mathtt{o}), (3,b)(3, \mathtt{b}), (7,x)(7, \mathtt{x})를 차례로 적용하면, 문자열은 anatoly → anatooo → anbbbbb → anbbbbx로 바뀐다.

각 수정 후에 현재 ss보다 사전순으로 작은 DD의 문자열 개수를 출력한다.

입력

첫 줄에 정수 nn과 qq가 주어진다 (1≤n,q≤1061 \le n, q \le 10^6). 둘째 줄에는 문자열 ss가 주어지며, 길이는 10610^6 이하의 소문자 알파벳이다. 이어서 nn개의 줄에 DD의 문자열이 주어진다. 각 문자열은 소문자 알파벳으로 이루어지며, DD에 있는 문자열 길이의 합은 10610^6을 넘지 않는다. 마지막으로 qq개의 줄에 수정이 주어진다. 각 줄에는 정수 kik_i와 소문자 알파벳 cic_i가 공백으로 구분되어 있다 (1≤ki≤∣s∣1 \le k_i \le |s|).

출력

첫 줄에 초기 문자열 ss보다 사전순으로 작은 DD의 문자열 개수를 출력한다. 이어서 qq개의 줄에 각 수정 후의 답을 한 줄씩 출력한다.

힌트

첫 번째 테스트에서 문자열은 anatoly → anatooo → anbbbbb → anbbbbx로 바뀐다.

초기 문자열 anatoly는 집합의 모든 문자열보다 작으므로 답은 00이다. 첫 수정 후의 anatooo는 집합에 같은 문자열이 있지만 그보다 작지 않으므로 답은 여전히 00이다. 두 번째 수정 후의 anbbbbb는 anatooo와 anba보다 크고 anbbbbu와 boris보다 작으므로 답은 22이다. 마지막 수정 후의 anbbbbx는 anatooo, anba, anbbbbu보다 크므로 답은 33이다.

예제2

  1. 예제 1

    입력
    4 3
    anatoly
    boris
    anatooo
    anbbbbu
    anba
    5 o
    3 b
    7 x
    
    예상 출력
    0
    0
    2
    3
    
  2. 예제 2

    입력
    5 5
    abcde
    buz
    ababa
    build
    a
    aba
    1 b
    3 z
    2 u
    4 z
    1 a
    
    예상 출력
    3
    3
    3
    4
    4
    1