아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

집합과 쿼리

시간 제한4초메모리 제한512 MB

요약
집합에 대한 삽입과 삭제가 최대 50만 번 주어질 때, 매 질의 후 집합의 부분집합으로 만들 수 있는 최대 XOR 값을 출력한다.
난이도

어려움10점 중 8점

유형
비트 연산, 수학, 그리디, 분할 정복
정답자
아직 제출이 없습니다

문제

집합 SS에 다음과 같은 쿼리를 수행해야 한다.

  • x: 집합 SS에 xx를 추가한다.
  • -x: 집합 SS에서 xx를 제거한다.

각 쿼리를 수행할 때마다, 집합에 포함된 모든 값을 XOR한 결과가 가장 큰 SS의 부분 집합 TT를 찾아야 한다.

입력

첫째 줄에 쿼리의 개수 NN(1≤N≤500,0001 \le N \le 500{,}000)이 주어진다. 둘째 줄부터 NN개의 줄에 쿼리가 한 줄에 하나씩 주어진다. 집합에 추가되는 수는 2,000,000,0002{,}000{,}000{,}000보다 작거나 같은 자연수이다.

집합에 이미 들어있는 수를 추가하는 쿼리와 집합에 없는 수를 제거하는 쿼리는 주어지지 않는다.

출력

각 쿼리를 수행한 후에 TT에 포함된 모든 값을 XOR한 결과를 출력한다. 쿼리를 수행한 후에 집합 SS의 크기가 00인 경우에는 00을 출력한다.

예제2

  1. 예제 1

    입력
    6
    1
    2
    3
    4
    -2
    -3
    
    예상 출력
    1
    3
    3
    7
    7
    5
    
  2. 예제 2

    입력
    5
    1
    -1
    2
    -2
    3
    
    예상 출력
    1
    0
    2
    0
    3