수열과 쿼리 34
시간 제한2초메모리 제한512 MB
두 정수 수열 a와 b를 두고 갱신과 구간 질의를 처리한다. a의 접미사 중 b와 가장 길게 일치하는 것의 길이와 그 개수를 구하고, b의 두 접미사의 최장 공통 접두사를 구하며, b의 두 부분 문자열을 이어 붙인 것이 b의 연속 부분 문자열인지 판정한다.
문제
길이가 각각 , 이고 양의 정수로 이루어진 두 수열 , 가 주어질 때, 아래의 쿼리를 수행하는 프로그램을 작성하시오. 모든 인덱스는 1-based이다.
1 y z: 를 수행한 후 를 출력한다. (, )2 y z: 를 출력한다. ()3 y z: 를 출력한다. ()4 p q r s: 수열 가 의 연속된 부분 수열 중 하나이면yes, 아니면no를 출력하라. (, )
은 인 부분수열이다. 에 대해서도 같은 방식으로 정의한다.
두 수열 , 에 대해:
- 는 와 의 최대 공통 접두사(Longest common prefix)의 길이이다.
- 는 두 정수의 쌍 로, 는 모든 의 접미사(suffix) 에 대해 의 최댓값, 는 그러한 최댓값을 이루는 의 개수를 뜻한다.
입력
첫 번째 줄에 의 길이 이 주어진다. ()
다음 줄에 개의 정수 이 주어진다. ()
다음 줄에 의 길이 이 주어진다. ()
다음 줄에 개의 정수 이 주어진다. ()
다음 줄에 쿼리의 개수 가 주어진다. ()
이후 개의 줄에 위에서 설명한 것과 같은 쿼리가 주어진다.
출력
각 쿼리의 결과를 순서대로 한 줄에 하나씩 출력한다.