Pagini recente » Cod sursa (job #1522017) | Cod sursa (job #2818937) | Cod sursa (job #3189652) | Cod sursa (job #812150) | Cod sursa (job #1510520)
#include <fstream>
using namespace std;
bool Trie[1 << 22];
int Map[1 << 21];
void add(int val)
{
int node=1, i;
for(i=20; i>=0; i--)
{
bool bit=(val>>i)&1;
Trie[node<<1 | bit]=1;
node=node<<1 | bit;
}
}
int xormax(int val)
{
int node=1, rez=0, i;
for(i=20; i>=0; i--)
{
bool bit=(val>>i)&1;
if(Trie[node<<1 | (bit^1)])
{
node=node<<1 | (bit^1);
rez=rez+(1<<i);
}
else node=node<<1 | bit;
}
return rez;
}
int main()
{
ifstream fin("xormax.in");
ofstream fout("xormax.out");
int n, sum=0, val, maxxor=-1, inc=-1, sf=-1, i, x;
fin >> n;
for(i=1; i<=n; i++)
{
Map[sum]=i;
add(sum);
fin >> val;
sum=sum^val;
x=xormax(sum);
if(x>maxxor)
{
maxxor=x;
sf=i;
inc=Map[sum^maxxor];
}
}
fout << maxxor << " " << inc << " " << sf;
fin.close();
fout.close();
return 0;
}