만드는 중입니다

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

XOR

시간 제한5초메모리 제한256 MB

요약
xor가 x 이상인 가장 긴 연속 구간을 찾아 시작 위치와 길이를 출력하며 동점이면 시작 위치가 가장 작은 구간을 선택합니다.
난이도

보통10점 중 7점

유형
트라이, 비트 연산, 누적 합
정답자
아직 제출이 없습니다

문제

길이가 NN인 수열 a1,a2,…,aNa_1, a_2, \ldots, a_N과 정수 xx가 주어진다. 연속한 원소의 xor가 xx 이상인 구간 중에서 가장 긴 것을 찾아라. 즉 다음 조건을 만족하면서 kk가 최대인 ii와 kk를 구한다.

ai⊕ai+1⊕⋯⊕ai+k−1≥x,1≤i≤i+k−1≤Na_i \oplus a_{i+1} \oplus \cdots \oplus a_{i+k-1} \ge x, \qquad 1 \le i \le i+k-1 \le N

입력으로 주어지는 모든 데이터에는 조건을 만족하는 구간이 적어도 하나 있다.

xor(⊕\oplus)는 두 수를 이진법으로 적었을 때 같은 자리의 비트마다 다음 규칙을 적용한 결과다.

  • 0⊕0=00 \oplus 0 = 0
  • 0⊕1=10 \oplus 1 = 1
  • 1⊕0=11 \oplus 0 = 1
  • 1⊕1=01 \oplus 1 = 0

결과는 피연산자의 순서와 무관해서 a⊕b=b⊕aa \oplus b = b \oplus a이고, a⊕(a⊕b)=ba \oplus (a \oplus b) = b이다. 파스칼에서는 xor, C와 C++, 자바에서는 ^ 연산자로 쓴다.

입력

첫째 줄에 NN과 xx가 주어진다. (1≤N≤250 0001 \le N \le 250\,000, 0≤x≤1090 \le x \le 10^9)

둘째 줄에 수열의 원소 NN개가 공백으로 구분되어 주어진다. 각 원소는 10910^9 이하의 음이 아닌 정수다.

출력

첫째 줄에 ii와 kk를 공백으로 구분해 출력한다. kk가 최대인 답이 여러 개면 ii가 가장 작은 것을 출력한다.

예제2

  1. 예제 1

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

    입력
    4 3
    1 2 1 2
    
    예상 출력
    1 2