Pagini recente » Cod sursa (job #344502) | Cod sursa (job #1952916) | Cod sursa (job #2529340) | Cod sursa (job #2152014) | Cod sursa (job #3170097)
#include <fstream>
using namespace std;
int n,k,x,y,p,poz,val,bit,maxi,st,dr;
struct trie
{
int ind,pz,cp[2];
}w[1<<21];
int main()
{
ifstream f("xormax.in");
ofstream g("xormax.out");
f>>n;
for(int i=1; i<=23; i++)
{
k++;
w[k].ind=0;
w[k].pz=0;
w[k].cp[0]=k+1;
}
k++;//am adaugat 0 in trie
for(int i=1; i<=n; i++)
{
f>>x;
x=x^y;
y=x;
p=1<<20;
poz=1;
while(p>=1)
{
bit=(x/p)%2;
//g<<bit;
if(w[poz].cp[1-bit]) poz=w[poz].cp[1-bit];
else poz=w[poz].cp[bit];
p/=2;
}
//g<<'\n';
//g<<x<<" "<<w[poz].ind<<'\n';
val=x^w[poz].ind;
if(val>maxi)
{
maxi=val;
st=w[poz].pz;
dr=i;
}
p=1<<20;
poz=1;
val=0;
while(p>=1)
{
bit=(x/p)%2;
val*=2;
val+=bit;
if(w[poz].cp[bit])
{
poz=w[poz].cp[bit];
w[poz].pz=i;
}
else
{
w[poz].cp[bit]=k+1;
k++;
w[k].ind=val;
w[k].pz=i;
poz=k;
}
p/=2;
}
}
g<<maxi<<" "<<st+1<<" "<<dr;
return 0;
}