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

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

XOR 수열

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

요약
B를 0 이상 N-1 이하에서 골라 A의 모든 원소에 XOR한 뒤, i < j이고 C_i < C_j인 쌍의 최대 개수를 구한다.
난이도

어려움10점 중 8점

유형
분할 정복, 비트 연산, 정렬, 재귀
정답자
아직 제출이 없습니다

문제

정수 NN과 길이가 MM인 수열 AA가 주어진다. NN은 2의 거듭제곱이고, AA의 각 원소는 00 이상 N−1N-1 이하의 정수이다.

00 이상 N−1N-1 이하의 정수 BB를 하나 골라서 새로운 수열 CC를 만들 수 있다. 모든 ii에 대해 Ci=Ai⊕BC_i = A_i \oplus B로 정한다. 여기서 ⊕\oplus는 비트 단위 배타적 논리합(XOR)이다.

그 다음, CC에서 i<ji < j이면서 Ci<CjC_i < C_j인 (i,j)(i, j) 쌍의 개수를 센다.

BB를 적절히 골라서 이러한 쌍의 개수의 최댓값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 NN이 주어진다. (2≤N≤2302 \le N \le 2^{30}, NN은 2의 거듭제곱)

둘째 줄에 수열 AA의 크기 MM이 주어진다. (2≤M≤1310722 \le M \le 131072)

셋째 줄에 A1,A2,…,AMA_1, A_2, \dots, A_M이 공백으로 구분되어 주어진다. (0≤Ai≤N−10 \le A_i \le N-1)

출력

첫째 줄에 i<ji < j이면서 Ci<CjC_i < C_j인 (i,j)(i, j) 쌍의 개수의 최댓값을 출력한다.

힌트

N=4N = 4, A=[3,2,1,0,3,2]A = [3, 2, 1, 0, 3, 2]일 때 B=3B = 3을 고르면 C=[0,1,2,3,0,1]C = [0, 1, 2, 3, 0, 1]이 된다. 이때 i<ji < j이면서 Ci<CjC_i < C_j인 쌍은 8개이다.

예제4

  1. 예제 1

    입력
    4
    6
    3 2 1 0 3 2
    
    예상 출력
    8
    
  2. 예제 2

    입력
    8
    8
    2 5 7 2 3 5 2 5
    
    예상 출력
    13
    
  3. 예제 3

    입력
    8
    7
    3 0 7 2 7 4 3
    
    예상 출력
    12
    
  4. 예제 4

    입력
    32
    15
    7 9 0 4 9 31 2 26 11 21 4 16 13 11 6
    
    예상 출력
    60