만드는 중입니다

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

원소 합치기

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

요약
배열에서 인접한 두 원소를 OR로 합치는 연산을 정확히 K번 했을 때, 남은 N-K개 원소 AND의 최댓값을 구합니다.
난이도

보통10점 중 7점

유형
비트 연산, 그리디, 동적 계획법, 누적 합
정답자
아직 제출이 없습니다

문제

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

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

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

입력

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

두 번째 줄에 배열 AA의 원소 A1,A2,…,ANA_1, A_2, \dots, A_{N}이 공백으로 구분되어 주어진다. (0≤Ai≤1090 \leq A_{i} \leq 10^{9})

출력

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

힌트

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

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

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

    • 같은 자릿수의 비트를 비교해 두 비트 모두 00일 때만 00이고, 나머지 경우는 11이다.
    • 예시는 다음과 같다. 01102=6 ∣ 11002=1211102=14\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