SOJ ONLINE JUDGE

문제 115

접미사 배열과 공통 접두사

내 상태
미제출
난이도
115번 문제 난이도 보기
Platinum III
출제자
rlatjwls7882
시간 제한
3000 ms
메모리 제한
1024 MB
115번 문제 태그 보기
구현

길이가 $N$인 문자열 $S$가 주어진다. 다음과 같이 정의한 길이 $N$의 세 배열 $SA$, $L$, $Z$를 구해 보자. 문자열과 배열의 인덱스는 $0$부터 $N-1$까지이다.

$S[l,r)$는 인덱스가 $l$ 이상 $r$ 미만인 $S$의 부분 문자열을 뜻한다. 두 문자열 $X$, $Y$의 최장 공통 접두사 길이를 $\operatorname{LCP}(X,Y)$라 하자.

  • 접미사 배열 $SA$: $S$의 접미사를 사전순으로 정렬했을 때, 각 접미사의 시작 인덱스
  • LCP 배열 $L$: $N>0$이면 $L_0=0$이고, $1\le i<N$에 대해 $L_i=\operatorname{LCP}(S[SA_{i-1},N),S[SA_i,N))$이다.
  • Z 배열 $Z$: $0\le i<N$에 대해 $Z_i=\operatorname{LCP}(S,S[i,N))$이다. $N>0$이면 $Z_0=N$이다.

입력

첫 번째 줄에 정수 $N$이 주어진다. $(0 \le N \le 200\,000)$

두 번째 줄에 알파벳 소문자로 이루어진 문자열 $S$가 주어진다. 입력 마지막에 오는 빈 문자열의 줄은 생략해도 된다.

출력

첫 번째 줄에 접미사 배열 $SA$를 출력한다.

두 번째 줄에 LCP 배열 $L$을 출력한다.

세 번째 줄에 Z 배열 $Z$를 출력한다.

각 배열의 원소는 인덱스 순서대로 공백으로 구분하여 출력한다. $N=0$이면 빈 줄 세 개를 출력한다.

예제 입력 1

5
ababa

예제 출력 1

4 2 0 3 1
0 1 3 0 2
5 0 3 0 1

제출

편집기에서 나가려면 Esc를 누른 뒤 Tab 또는 Shift와 Tab을 누르세요.