给一个长度为n的序列,a[1], a[2], ... , a[n], 选出连续的k个数,使得这k个数的最大值加这k个数的or值最大。
假设选出的数为a[l], a[l + 1], ... , a[l + k -1],即求
max(a[l], a[l + 1], ... , a[l + k -1]) + (a[l] | a[l + 1] | ... | a[l + k -1])
对于所有的1 <= k <= n,输出答案
输入:
第一行输入一个n,第二行输入n个数,a[1], a[2], ... , a[n].
输出:
输出n行,每行一个整数。第i行表示k = i时的答案。
样例输入:
3
1 0 2
样例输出:
4
4
5
数据范围:
对于20%的数据,1 <= n <= 300
对于40%的数据,1 <= n <= 5000
对于100%的数据,1 <= n <= 200000, 0 <= a[i] < 2^16