Pagini recente » Borderou de evaluare (job #806809) | Borderou de evaluare (job #1279574) | Borderou de evaluare (job #1710561) | Borderou de evaluare (job #1020470) | Cod sursa (job #3170105)
#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;
maxi=-1;
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];
}
else
{
w[poz].cp[bit]=k+1;
k++;
w[k].ind=val;
poz=k;
}
p/=2;
}
w[poz].pz=i;
}
g<<maxi<<" "<<st+1<<" "<<dr;
return 0;
}