#include <bits/stdc++.h>
const
int
MAX = 100005;
using
namespace
std;
int
seg[4 * MAX];
void
build(
int
node,
int
l,
int
r,
int
a[])
{
if
(l == r)
seg[node] = a[l];
else
{
int
mid = (l + r) / 2;
build(2 * node, l, mid, a);
build(2 * node + 1, mid + 1, r, a);
seg[node] = (seg[2 * node]
| seg[2 * node + 1]);
}
}
int
query(
int
node,
int
l,
int
r,
int
start,
int
end,
int
a[])
{
if
(l > end or r < start)
return
0;
if
(start <= l and r <= end)
return
seg[node];
int
mid = (l + r) / 2;
return
((query(2 * node, l, mid,
start, end, a))
| (query(2 * node + 1, mid + 1,
r, start, end, a)));
}
void
orsum(
int
a[],
int
n,
int
q,
int
k[])
{
build(1, 0, n - 1, a);
for
(
int
j = 0; j < q; j++) {
int
i = k[j] % (n / 2);
int
sec = query(1, 0, n - 1,
n / 2 - i, n - i - 1, a);
int
first = (query(1, 0, n - 1, 0,
n / 2 - 1 - i, a)
| query(1, 0, n - 1,
n - i, n - 1, a));
int
temp = sec + first;
cout << temp << endl;
}
}
int
main()
{
int
a[] = { 7, 44, 19, 86, 65, 39, 75, 101 };
int
n =
sizeof
(a) /
sizeof
(a[0]);
int
q = 2;
int
k[q] = { 4, 2 };
orsum(a, n, q, k);
return
0;
}