원소 합치기

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

요약
인접한 두 원소를 정확히 K번 OR로 합친 뒤 남은 N-K개 원소를 모두 AND한 값의 최댓값을 구한다.
난이도

어려움10점 중 8점

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

문제

음이 아닌 정수 NN개로 이루어진 배열 A=\[A_1,…,A_N]A=\[A\_{1}, \dots, A\_{N}]이 주어진다. 배열 AA에 다음 연산을 KK번 진행한다.

  • 배열에 남아 있는 원소 중에서 인접한 두 원소를 선택해, 해당 원소들에 대해 bitwise OR\textrm{OR} 연산을 적용하고 그 결괏값으로 두 원소를 대체한다. 다시 말해 현재 배열의 길이를 LL이라 하면, 정수 i(1≤i<L)i(1 \leq i < L)를 선택해 \[A_1,A_2,…,A_i,A_i+1,…,A_L]\[A\_1, A\_2, \dots, A\_i, A\_{i+1}, \dots, A\_{L}]을 \[A_1,A_2,…,A_i∣A_i+1,…,A_L]\[A\_1, A\_2, \dots, A\_i | A\_{i+1}, \dots, A\_{L}]로 변경한다. 이 연산을 진행한 뒤 배열의 길이는 11만큼 줄어든다.

KK번의 연산을 진행한 이후 배열에 남은 N−KN-K개의 원소를 모두 bitwise AND\textrm{AND} 연산한 값의 최댓값을 구해보자.

bitwise AND\textrm{AND}와 bitwise OR\textrm{OR} 연산에 대한 설명은 노트를 참고하라.

입력

첫 번째 줄에 NN과 KK가 공백으로 구분되어 주어진다. (2≤N≤500,000;1≤K≤N−1)(2 \leq N \leq 500\\, 000;1 \leq K \leq N-1)

두 번째 줄에 배열 AA의 원소 A_1,A_2,…,A_NA\_1, A\_2, \dots, A\_{N}이 공백으로 구분되어 주어진다. (0≤A_i≤109)\left( 0 \leq A\_{i} \leq 10^{9}\right)

출력

총 KK번의 연산을 진행한 후 배열에 남은 N−KN-K개의 원소를 모두 bitwise AND\textrm{AND} 연산한 값의 최댓값을 출력한다.

힌트

bitwise 연산자들은 비트 단위로 연산을 시행한다.

  • bitwise AND\textrm{AND} 연산(\\&)은 두 수의 각 비트마다 다음과 같은 연산을 진행한다.

    • 같은 자릿수의 비트를 비교해 두 비트 다 11일 때만 11, 나머지의 경우는 00이다.
    • 다음은 예시이다. \ \begin{array}{rcl} 0101\_2 & = & 5 \\\ \\& \ 0011\_2 & = & 3 \\\ \hline 0001\_2 & = & 1 \end{array}
  • bitwise OR\textrm{OR} 연산(∣|)은 두 수의 각 비트마다 다음과 같은 연산을 진행한다.

    • 같은 자릿수의 비트를 비교해 두 비트 다 00일 때만 00, 나머지의 경우는 11이다.
    • 다음은 예시이다. \ \begin{array}{rcl} 0110\_2 & = & 6 \\\ \ | \ 1100\_2 & = & 12 \\\ \hline 1110\_2 & = & 14 \end{array}

예제1

  1. 예제 1

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