구간 비트 OR 최댓값

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

요약
배열에서 길이가 K인 모든 연속 구간의 비트 OR 중 최댓값을 K = 1부터 N까지 각각 구한다.
난이도

어려움10점 중 8점

유형
비트 연산, 분할 정복, 배열, 세그먼트 트리
정답자
아직 제출이 없습니다

문제

길이가 NN인 음이 아닌 정수 배열이 주어진다. 11 이상 NN 이하의 모든 정수 KK에 대해, 연속한 KK개의 원소로 이루어진 부분 배열의 비트 OR 값 가운데 최댓값을 구하라.

음이 아닌 정수 여러 개의 비트 OR는 다음과 같이 정의한다. 결과의 오른쪽에서 ii번째 이진 자릿수는 주어진 수 전부의 오른쪽에서 ii번째 이진 자릿수가 00일 때만 00이고, 그렇지 않으면 11이다.

입력

첫째 줄에 배열의 길이 NN이 주어진다 (1≤N≤5000001 \le N \le 500000).

이어지는 NN개의 줄에 배열의 원소가 한 줄에 하나씩 주어진다. 각 원소는 정수 xx이다 (0≤x<2300 \le x < 2^{30}).

출력

NN개의 줄을 출력한다. kk번째 줄에는 길이가 kk인 연속한 부분 배열의 비트 OR 값 중 최댓값을 출력한다.

예제2

  1. 예제 1

    입력
    8
    10
    7
    11
    4
    7
    6
    2
    16
    
    예상 출력
    16
    18
    22
    23
    23
    31
    31
    31
    
  2. 예제 2

    입력
    5
    1
    2
    4
    8
    16
    
    예상 출력
    16
    24
    28
    30
    31