문제 링크
- https://icpc.me/25546
사용 알고리즘
- Suffix Array
- Persistent Segment Tree
풀이
각 패턴 $P_i$에 대해, $S$에서 $P_i$가 $K_i$번째로 등장하는 위치를 구하는 문제입니다.
문자열 $T = S#P_1#P_2#\cdots#P_M$를 생각해 봅시다. 패턴 $P_i$가 등장하는 위치는 $T$의 접미사 배열 상에서 구간 형태로 나타낼 수 있고, LCP 배열과 RMQ를 이용해 파라메트릭 서치를 하면 각 패턴마다 $O(\log N)$ 시간에 구간을 구할 수 있습니다.
이 과정을 거치면 구간에서 $K_i$번째 수를 찾는 문제로 바뀌는데, 이건 PST를 사용하면 $O(\log N)$에 구할 수 있습니다.
전체 코드
1 |
|