해설
인덱스는 설명에서 부터 시작한다고 하자.
인 답에서, 어느 순간 연속한 두 구간의 왼쪽 끝이 라고 하자. 먼저 에서 시작한 구간을 닫고, 그 뒤에 새로운 구간의 왼쪽 끝을 골라야 한다.
를 왼쪽 끝이 인 두 구간에서 시작하여 만들 수 있는 구간 개수의 최댓값이라고 정의한다. 불가능하면 이다.
보다 뒤에서 와 같은 문자가 처음 나타나는 위치를 라고 하자. 그런 위치가 없다면 이다. 에서 시작한 구간의 오른쪽 끝을 보다 더 뒤의 같은 문자로 잡는 것은 이후에 사용할 수 있는 위치를 줄이기만 하므로, 항상 가장 이른 위치 만 고려하면 충분하다.
두 구간만으로 끝내려면 보다 뒤에 와 같은 문자가 존재해야 한다. 이 경우 이다.
세 구간 이상을 만들려면 보다 뒤의 어떤 위치 를 새로운 구간의 왼쪽 끝으로 고른다. 이후의 문제는 왼쪽 끝이 인 상태와 같으므로 다음 점화식을 얻는다.
여기서 첫 번째 항은 실제로 보다 뒤에 가 존재할 때만 사용할 수 있고, 두 번째 항은 해당 범위에 양수인 상태가 있을 때만 사용할 수 있다.
각 에 대해 다음 suffix maximum을 관리한다.
그러면 점화식의 최댓값을 에 구할 수 있다. 는 만 참조하고 항상 이므로, 를 큰 값부터 작은 값 순서로 처리하면 된다.
마지막으로 모든 의 최댓값을 구한다. 같은 문자가 두 번 이상 등장하지만 두 구간을 만들 수 없는 경우에는 답이 이며, 같은 문자가 한 번도 반복되지 않으면 답은 이다.
다음 등장 위치는 각 위치와 문자에 대해 전처리할 수 있다. 상태 수와 suffix maximum의 크기가 모두 이므로 시간 복잡도는 , 메모리 복잡도는 이다.
Solution written by GPT5.6