구간합구하기5


답안 제출

Points: 10
시간 제한: 2.0s
메모리 제한: 256M

문제 유형
허용된 언어
C, C++, Python

알파벳 소문자로만 이루어진 문자열 S가 주어집니다.

이 문자열에 대해 특정 구간 [L, R] 사이에 특정 알파벳이 몇 번 등장하는지 묻는 질문(쿼리)이 수시로 들어옵니다.

질문이 들어올 때마다 각 구간에 해당 알파벳이 등장하는 횟수를 빠르게 구해 출력하는 프로그램을 작성하시오.

(단, 문자열의 인덱스는 0부터 시작합니다.)

입력

첫째 줄에 알파벳 소문자로만 구성된 문자열 S가 주어집니다. (1 ≤ 문자열의 길이 ≤ 100,000)

둘째 줄에 질문의 개수 Q가 주어집니다. (1 ≤ Q ≤ 100,000)

셋째 줄부터 Q개의 줄에 걸쳐 찾으려는 알파벳 소문자 alpha와 구간의 시작 인덱스 L, 끝 인덱스 R이 공백으로 구분되어 한 줄에 하나씩 주어집니다. (0 ≤ L ≤ R < 문자열의 길이)

출력

질문이 들어온 순서대로, 각 질문에 대한 답(해당 알파벳의 등장 횟수)을 한 줄에 하나씩 차례대로 출력합니다.

예제 입력 1

banana
3
a 1 5
n 0 3
b 2 4

예제 출력 1

3
1
0

힌트 (예제 설명)

문자열은 S = "banana" 입니다. (길이 6, 인덱스 0~5)

  • 1번째 질문: 'a'가 1번부터 5번 인덱스("anana") 사이에 몇 번 나오는가? -> 1번, 3번, 5번 인덱스에 'a'가 총 3번 등장하므로 3입니다.
  • 2번째 질문: 'n'이 0번부터 3번 인덱스("bana") 사이에 몇 번 나오는가? -> 2번 인덱스에 'n'이 1번 등장하므로 1입니다.
  • 3번째 질문: 'b'가 2번부터 4번 인덱스("nan") 사이에 몇 번 나오는가? -> 'b'는 0번 인덱스에만 있고 해당 범위 내에는 없으므로 0입니다.

코멘트

현재 작성된 코멘트가 없습니다.