Pagini recente » Cod sursa (job #57197) | Cod sursa (job #1280128) | Cod sursa (job #2548174) | Cod sursa (job #2342969) | Cod sursa (job #1077055)
#include <fstream>
#include <cstring>
using namespace std;
const int N=100005;
ifstream fin("xormax.in");
ofstream fout("xormax.out");
struct Trie
{
int n;
Trie *f[2];
Trie()
{
n=0;
f[0]=f[1]=0;
}
} *T=new Trie;
int a[N];
void tinsert(Trie *nod, int x, int lvl, int poz)
{
if(lvl==-1)
{
nod->n=poz;
return;
}
int next=(x&(1<<lvl))?1:0;
if(!nod->f[next]) nod->f[next]=new Trie;
tinsert(nod->f[next], x, lvl-1, poz);
}
int tquery(Trie *nod, int x, int lvl)
{
if(lvl==-1) return nod->n;
int next=(x&(1<<lvl))?1:0;
if(!nod->f[!next]) return tquery(nod->f[next], x, lvl-1);
return tquery(nod->f[!next], x, lvl-1);
}
int main()
{
int n, i, j, sol=-1, solx, soly;
fin>>n;
tinsert(T, 0, 20, 0);
for(i=1;i<=n;i++)
{
fin>>a[i];
a[i]^=a[i-1];
j=tquery(T, a[i], 20);
if(a[i]^a[j]>sol)
{
sol=a[i]^a[j];
solx=j;
soly=i;
}
tinsert(T, a[i], 20, i);
}
fout<<sol<<" "<<solx+1<<" "<<soly;
fin.close();
fout.close();
}