Pagini recente » Cod sursa (job #2192132) | Cod sursa (job #2183223) | Cod sursa (job #2371284) | Cod sursa (job #1534811) | Cod sursa (job #2901169)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("xormax.in");
ofstream fout("xormax.out");
const int nmax=1e5+5,maxput=21;
int n,maxim,start,ende;
int v[nmax];
int maxpos[(1<<23)+5];
bool trie[(1<<23)+5];
int parcurge_trie(int i)
{
int bit=maxput;
int nod=1;
while(bit>=0)
{
bool pi=( ( (1<<bit)&v[i])==0 );
if(trie[2*nod+pi]==0) pi=!pi;
nod=2*nod+pi;
bit--;
}
return maxpos[nod];
}
void add_to_trie(int i)
{
int bit=maxput;
int nod=1;
while(bit>=0)
{
bool pi=( ( (1<<bit)&v[i])!=0 );
if(trie[2*nod+pi]==0) trie[2*nod+pi]=1;
nod=2*nod+pi;
bit--;
}
maxpos[nod]=max(maxpos[nod],i);
}
int main()
{
fin>>n;
add_to_trie(0);
for(int i=1; i<=n; i++)
{
fin>>v[i];
if(maxim<v[i])
{
maxim=v[i];
start=i;
ende=i;
}
v[i]=v[i-1]^v[i];
}
for(int i=0; i<=n; i++)
{
add_to_trie(i);
int elem=parcurge_trie(i);
if(maxim<(v[elem]^v[i]))
{
maxim=v[elem]^v[i];
start=elem+1;
ende=i;
}
}
fout<<maxim<<" "<<start<<" "<<ende<<" ";
return 0;
}