문제 링크
- https://icpc.me/11840
사용 알고리즘
- Persistent Trie
풀이
먼저 Prefix XOR을 만듭시다. $A_e \oplus A_{s-1} \geq K$를 만족하는 가장 긴 구간 $[s, e]$를 찾아야 하고, 이는 각각의 $e$마다 $A_e \oplus A_{s-1} \geq K$인 가장 작은 $s$를 찾는 것으로 해결할 수 있습니다.
파라메트릭 서치를 합시다. 구체적으로, $\max\left{ A_e \oplus A_1, A_e \oplus A_2, \cdots, A_e \oplus A_m \right} \geq K$인 가장 작은 $m$을 찾을 것입니다. $\left{ A_1, A_2, \cdots, A_m \right}$를 저장한 Trie가 있다면 결정 문제를 $O(\log X)$ 시간에 해결할 수 있습니다.
하지만 Trie를 $O(N)$개 만드는 것은 불가능하기 때문에 더 효율적인 방법을 생각해야 합니다.
여러가지 방법이 있겠지만, 가장 간단한 방법은 persistent trie를 만드는 것입니다. persistent segment tree와 비슷하게, 원소 하나를 삽입할 때 변경되는 $O(\log X)$개의 정점만 새로 생성하는 것입니다. 시간 복잡도와 공간 복잡도 모두 일반적인 Trie와 동일합니다.
전체 코드
1 |
|