Pagini recente » Rezultatele filtrării | Cod sursa (job #152876) | Rezultatele filtrării | Rezultatele filtrării | Cod sursa (job #528847)
Cod sursa(job #528847)
#include <cstring>
#include <fstream>
using namespace std;
struct Trie
{
Trie* son[2];
Trie()
{
memset(son, 0, sizeof(son));
}
};
Trie* T = new Trie;
void Tinsert(Trie* now, int number, int K)
{
if (K < 0) return;
int aux = ((number & (1 << K)) != 0 ? 1 : 0);
if (now->son[aux] == 0)
{
Trie* noda = new Trie;
now->son[aux] = noda;
}
Tinsert(now->son[aux], number, K - 1);
}
int N, V[100002];
int result;
int main()
{
ifstream fin("xormax.in");
ofstream fout("xormax.out");
fin >> N;
for (int i = 1; i <= N; ++i)
{
fin >> V[i];
V[i] ^= V[i - 1];
}
Tinsert(T, 0, 20);
for (int i = 1; i <= N; ++i)
{
Trie* now = T;
int resnow = 0;
for (int j = 20; j >= 0; --j)
{
int aux = !(((V[i] & (1 << j)) != 0 ? 1 : 0));
if (now->son[aux] != 0)
{
resnow |= (1 << j);
now = now->son[aux];
}
else now = now->son[!aux];
}
if (resnow > result) result = resnow;
Tinsert(T, V[i], 20);
}
fout << result;
fin.close();
fout.close();
}