Pagini recente » Cod sursa (job #1544208) | Cod sursa (job #2837995) | Cod sursa (job #3257883) | Cod sursa (job #2816360) | Cod sursa (job #2030387)
#include <fstream>
using namespace std;
ifstream fi ("xormax.in");
ofstream fo ("xormax.out");
struct nod
{
nod *st,*dr;
int inceput;
nod()
{
st=NULL;
dr=NULL;
}
};
nod *start;
int i,n,xorr,str,xormax,inc,sf;
void adaug(nod *&curent,int nr,int bit)
{
if (curent==NULL) curent=new nod;
if (bit==0)
{
curent -> inceput=i;
return;
}
if (nr&bit)
adaug(curent -> st,nr,bit/2);
else
adaug(curent -> dr,nr,bit/2);
}
void caut(nod *&curent,int nr,int bit)
{
if (bit==0)
{
str=curent -> inceput;
return;
}
if (nr&bit)
{
if (curent -> dr != NULL)
caut(curent -> dr,nr,bit/2);
else
{
xorr=(xorr^bit);
caut (curent -> st,nr,bit/2);
}
}
else
{
if (curent -> st != NULL)
{
xorr=(xorr^bit);
caut(curent -> st,nr,bit/2);
}
else caut(curent -> dr,nr,bit/2);
}
}
int main()
{
fi>>n;
start=new nod;
int sum=0,x=0;
adaug(start,0,(1<<22));
for (i=1;i<=n;i++)
{
xorr=0;
fi>>x;
sum=(sum^x);
caut(start,sum,(1<<22));
adaug(start,sum,(1<<22));
if (xormax<(xorr^sum))
{
xormax=(xorr^sum);
sf=i;
inc=str+1;
}
if (xormax==(xorr^sum)) inc=str+1;
}
fo<<xormax<<' '<<inc<<' '<<sf;
return 0;
}