만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

흥미로운 수

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

요약
정수 n개와 k가 주어졌을 때, 모든 두 원소의 XOR 값이 k 이하가 되는 부분수열의 최대 길이를 구합니다.
난이도

보통10점 중 7점

유형
비트 연산, 트라이, 해시맵
정답자
아직 제출이 없습니다

문제

비트 배타적 논리합(bitwise exclusive or), 줄여서 XOR은 ⊕\oplus로 나타내는 연산으로, 두 정수의 대응하는 비트끼리 XOR을 계산한다. xx, yy, zz의 ii번째 이진 자릿수를 각각 xi,yi,zix_i, y_i, z_i라 하고 z=x⊕yz = x \oplus y이면, zi=(xi+yi)mod  2z_i = (x_i + y_i) \mod 2이다.

양의 정수 kk가 주어진다. 정수들의 수열은 임의의 두 원소의 XOR 값이 kk 이하이면 흥미롭다.

수열 a1,…,ana_1, \dots, a_n이 주어졌을 때, 흥미로운 부분수열의 최대 길이를 구하라. 부분수열은 주어진 수열에서 원소를 0개 이상 지워서 얻을 수 있는 수열이다.

입력

첫 줄에 테스트 케이스의 수 zz (1≤z≤1 0001 \leq z \leq 1\,000)가 주어진다. 각 테스트 케이스가 이어서 주어진다.

각 테스트 케이스의 첫 줄에는 두 정수 nn, kk (1≤n≤30 0001 \leq n \leq 30\,000, 1≤k<2201 \leq k < 2^{20})가 주어진다. 각각 수열의 길이와, 수열에서 고른 두 원소의 XOR 최댓값의 상한이다.

둘째 줄에는 주어진 수열인 음이 아닌 정수 a1,…,ana_1, \dots, a_n (0≤ai<2200 \leq a_i < 2^{20})이 주어진다.

모든 테스트 케이스에 대한 nn의 합은 200 000200\,000을 넘지 않고, kk의 합은 3 200 0003\,200\,000을 넘지 않는다.

출력

각 테스트 케이스마다 주어진 수열의 흥미로운 부분수열 길이의 최댓값을 한 줄에 출력한다.

힌트

원소 3, 9, 10, 3으로 이루어진 부분수열은 흥미롭다. 모든 쌍의 XOR 값이 11 이하이기 때문이다. 예를 들어 9⊕10=10012⊕10102=112=3≤119 \oplus 10 = 1001_2 \oplus 1010_2 = 11_2 = 3 \leq 11이다. 원소가 5개인 흥미로운 부분수열은 없다. 예를 들어 (3,9,10,3,4)(3, 9, 10, 3, 4)는 4⊕9=1002⊕10012=11012=13>114 \oplus 9 = 100_2 \oplus 1001_2 = 1101_2 = 13 > 11이므로 흥미롭지 않다.

예제1

  1. 예제 1

    입력
    1
    7 11
    3 12 9 10 16 3 4
    
    예상 출력
    4