XOR 머신

시간 제한2초메모리 제한1024 MB

요약
숨겨진 수열 A와 0으로 초기화된 B가 있을 때, 제한된 XOR 갱신 연산으로 A의 모든 짝수 길이 부분수열 XOR 최댓값을 두 번의 질의 안에 구한다.
난이도

어려움10점 중 9점

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

문제

당신은 다음과 같은 문제를 두 번 해결해야 한다.

길이 NN의 수열 AA와 길이 2N2N의 수열 BB가 있다. 두 번의 문제 해결에서 NN은 같지만 AA는 다를 수 있다. 수열 AA의 내용은 알 수 없고, BB는 각 문제를 해결하기 시작할 때 모든 원소가 00이다.

부분 수열의 XOR합이란, 부분 수열에 들어있는 모든 원소를 XOR한 값을 의미한다.

당신은 수열 AA의 모든 짝수 크기의 부분 수열의 XOR합 중 최댓값을 찾아야 한다.

당신은 다음과 같은 연산을 할 수 있다.

  • A ii jj : B_iB\_i의 값을 B_i⊕A_jB\_i \oplus A\_j로 바꾼다. 이 연산은 두 번의 문제 해결에서 총합하여 최대 3N3N번 할 수 있다.
  • C ii xx : B_iB\_i의 값을 B_i⊕xB\_i \oplus x로 바꾼다. 이 연산은 두 번의 문제 해결에서 총합하여 최대 2N2N번 할 수 있다.
  • Q kk v_1v\_{1} v_2v\_{2} ⋯\cdots v_kv\_{k} : 길이 kk의 수열 B_v_1,B_v_2,⋯B_v_kB\_{v\_{1}}, B\_{v\_{2}}, \cdots B\_{v\_{k}}의 모든 부분수열의 XOR합 중 최댓값을 찾는다. 이 연산은 두 번의 문제 해결에서 총합하여 최대 22번 할 수 있으며 kk의 합은 총합하여 2N2N을 넘길 수 없다.
  • ! xx : 문제의 답 xx를 알아냈다면 이 연산을 통해 답을 제출할 수 있다.

연산들을 적절히 사용하여 문제의 답을 찾아내 보자.

각 연산을 할 수 있는 횟수 및 Q 연산에서의 kk의 합이 제한되어 있으며, 자세한 사항은 인터랙션 항목을 참조하여라.

입력

첫째 줄에 수열의 길이 NN이 주어진다. (2≤N≤100,000)(2 \leq N \leq 100\\,000)

숨겨진 수열 AA의 원소 A_iA\_i는 모두 00보다 크거나 같고 5×1085 \times 10^8보다 작거나 같은 정수이다.

이후 당신과 채점 시스템과의 인터랙션이 진행된다.

힌트

두 정수 aa, bb에 대해 a⊕ba \oplus b는 aa와 bb를 XOR한 값으로 정의한다.

부분 수열은 수열에서 00개 이상의 수를 제거하여 만든 수열을 의미한다.

예제1

  1. 예제 1

    입력
    4
    
    
    
    
    
    
    7
    
    
    
    
    
    
    14
    
    예상 출력
    
    A 1 1
    A 2 2
    C 1 4
    A 3 4
    A 3 1
    Q 3 1 2 3
    
    ! 7
    A 1 1
    A 2 2
    A 3 3
    A 4 4
    Q 4 1 2 3 4
    
    ! 12