문제 링크
- https://icpc.me/19239
시간복잡도
- $O(N \log N)$
풀이
고인물이라면 문제를 보자마자 오프라인 동적 연결성처럼 세그먼트 트리 위에서 트라이를 들고 다니면서 DFS하는 풀이가 가장 먼저 떠오를 것입니다. 하지만 이 문제는 메모리 제한이 8MB라서 트라이를 만들 수 없습니다.
사실 잘 생각해 보면, 수들을 오름차순으로 정렬했을 때 인접한 수들의 XOR만 봐도 최솟값을 구할 수 있습니다. 상위 비트가 없어지기 위한 조건을 생각해 보면 직관적으로 알 수 있습니다.
따라서 BBST나 스킵 리스트처럼 원소들의 정렬성을 유지하는 자료구조를 사용하면 온라인으로 해결할 수 있습니다. 원소가 삽입/삭제될 때, 그 원소 근방에서의 XOR값의 변화를 우선 순위 큐 2개 또는 BBST로 관리하면 최솟값을 구할 수 있습니다.
전체 코드
1 |
|