소문자로 이루어진 문자열에서 각 구간 질의 안에 완전히 포함된 팰린드롬 부분 문자열 개수를 구합니다.
어려움8문자열 매칭세그먼트 트리정렬수학아직 제출이 없습니다시간 제한2초메모리 제한64 MB모의고사를 열고 싶었지만 낼 문제가 없던 운영진은 머릿속에 떠오른 두 낱말, 팰린드롬과 자료구조를 섞어 문제를 내기로 했다.
승현이가 알파벳 소문자로만 이루어진 문자열 S를 만들었다. 1≤i≤j≤∣S∣인 두 정수 i, j에 대해 S[i..j]는 S의 i번째 문자부터 j번째 문자까지를 차례로 이어 붙인 부분문자열이다.
질의 하나는 두 정수 a, b로 주어진다. 각 질의마다 S[a..b] 안에 놓인 팰린드롬이 몇 개인지 세면 된다. 다시 말해 a≤x≤y≤b이면서 S[x..y]가 팰린드롬인 순서쌍 (x,y)의 개수를 구한다. 같은 문자열이라도 시작 위치가 다르면 따로 센다.
첫째 줄에 승현이가 만든 문자열 S가 주어진다. S는 알파벳 소문자 a부터 z까지로만 이루어져 있고, 길이는 1≤∣S∣≤100000이다.
둘째 줄에 질의의 개수 Q (1≤Q≤300000)가 주어진다. 이어지는 Q개의 줄에 각각 두 정수 ai와 bi (1≤ai≤bi≤∣S∣)가 주어진다.
질의마다 S[ai..bi] 안에 놓인 팰린드롬의 개수를 입력에 주어진 순서대로 한 줄에 하나씩 출력한다.
문자열 T=t1t2t3⋯tn이 팰린드롬이라는 것은 앞에서 뒤로 읽으나 뒤에서 앞으로 읽으나 같다는 뜻이다. 즉 t1t2t3⋯tn−1tn=tntn−1⋯t3t2t1을 만족하는 T가 팰린드롬이다. 길이가 1인 문자열은 언제나 팰린드롬이다.
∣S∣는 문자열 S의 길이이다.