/* -*- coding: utf-8 -*- * * 3550.cc: No.3550 Another Rurumaru Function Problem - yukicoder */ #include #include #include using namespace std; /* constant */ const int MAX_N = 200000; const int BN = 30; /* typedef */ using vi = vector; /* global variables */ int as[MAX_N]; /* subroutines */ int f(int x, int y) { int s = 0; for (int i = 0; i < BN && (x > 0 || y > 0); i++, x >>= 1, y >>= 1) { int bx = x & 1, by = y & 1; s |= (! (i & 1) ? (bx & by) : (bx | by)) << i; } return s; } void setmax(int &a, int b) { if (a < b) a = b; } /* main */ int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", as + i); vi av(as, as + n); int x = 0, omsk = 0; for (int i = BN - 1, bi = 1 << i; i >= 0; i--, bi >>= 1) { if (! (i & 1)) { // i:even -> AND vi av1; int ao = 0; for (auto a: av) { if (a & bi) av1.push_back(a), ao |= (a & omsk); } if (! av1.empty() && (ao & omsk) == omsk) { x |= bi; swap(av, av1); } } else { // i:odd -> OR int bo = 0; for (auto a: av) bo |= (a & bi); if (bo) { x |= bi; omsk |= bi; } } } printf("%d\n", x); return 0; }