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

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

Bitwise Xor

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

요약
고른 원소 두 개의 xor가 모두 x 이상인 비어 있지 않은 부분수열의 개수를 998244353으로 나눈 나머지로 구한다.
난이도

어려움10점 중 9점

유형
비트 연산, 트라이, 조합론, 재귀
정답자
아직 제출이 없습니다

문제

Zhong Ziqian은 생일 선물로 정수 배열 a1,a2,…,ana_1, a_2, \ldots, a_n과 정수 xx를 받았다.

그날 이후 매일, 그는 이 배열의 비어 있지 않은 부분수열 1≤b1<b2<…<bk≤n1 \le b_1 < b_2 < \ldots < b_k \le n을 찾으려고 했다. 이때 모든 쌍 (i,j)(i, j) (1≤i<j≤k1 \le i < j \le k)에 대해 abi⊕abj≥xa_{b_i} \oplus a_{b_j} \ge x가 성립해야 한다. 여기서 ⊕\oplus는 비트별 배타적 논리합 연산이다.

물론 그는 매일 서로 다른 부분수열을 찾아야 한다.

그는 같은 부분수열을 반복하지 않고 며칠 동안 이를 해낼 수 있는가? 이 수는 매우 클 수 있으므로 998 244 353998\,244\,353으로 나눈 나머지를 출력한다.

입력

첫째 줄에 두 정수 nn과 xx가 주어진다 (1≤n≤300 0001 \le n \le 300\,000, 0≤x≤260−10 \le x \le 2^{60} - 1). nn은 배열의 크기이다.

둘째 줄에 nn개의 정수 a1,a2,…,ana_1, a_2, \ldots, a_n이 주어진다. 이는 배열 자체이다 (0≤ai≤260−10 \le a_i \le 2^{60} - 1).

출력

Ziqian의 배열에서 임의의 두 원소의 비트별 배타적 논리합이 모두 xx 이상인 부분수열의 개수를 998 244 353998\,244\,353으로 나눈 나머지를 출력한다.

힌트

첫 번째 예제에서는 23−12^3 - 1개의 비어 있지 않은 부분수열이 모두 조건을 만족한다.

두 번째 예제에서는 두 개의 비어 있지 않은 부분수열이 조건을 만족하지 않는데, 그것은 b=[1,2]b = [1, 2]와 b=[1,2,3]b = [1, 2, 3]이다. a1⊕a2=0⊕1=1a_1 \oplus a_2 = 0 \oplus 1 = 1이 22보다 작기 때문이다.

세 번째 예제에서는 b=[1]b = [1], b=[2]b = [2], b=[3]b = [3], b=[2,3]b = [2, 3]이 조건을 만족한다.

예제4

  1. 예제 1

    입력
    3 0
    0 1 2
    
    예상 출력
    7
    
  2. 예제 2

    입력
    3 2
    0 1 2
    
    예상 출력
    5
    
  3. 예제 3

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

    입력
    7 4
    11 5 5 8 3 1 3
    
    예상 출력
    35