문제 링크
- http://icpc.me/16903
사용 알고리즘
- Trie
시간복잡도
- $O(Q log 10^9)$
풀이
xor한 결과가 가장 큰 수는 trie를 이용해 구할 수 있다는 것이 잘 알려져있습니다.
최상위 비트부터 “최대한 반대로” 이동하면 최대가 됩니다.
1번 쿼리가 주어지면 trie에 x를 이진법으로 변환한 비트열을 넣어주고, 2번 쿼리가 주어지면 제거를 해주면 됩니다.
각 노드가 몇 번 사용되었는지 기록을 해주면서 0이 되는 순간 그 노드는 지워줘도 상관 없습니다.
3번 쿼리가 주어지면 최대한 반대로 이동해주면 됩니다.
자세한 구현은 코드를 참고해주세요.
전체 코드
1 |
|