Pagini recente » Cod sursa (job #1485527) | Cod sursa (job #691997) | Cod sursa (job #3224381) | Cod sursa (job #1345073) | Cod sursa (job #2400774)
#include<fstream>
#include<queue>
#include<bitset>
using namespace std;
ifstream fin("xormax.in");
ofstream fout("xormax.out");
bitset<22> aux;
int a,ac,i,n,j,maxi,st,dr;
struct nod{
int ok;
nod *fiu[2];
};
void reset(nod *lvl)
{
lvl->ok=0;
for(int i=0;i<=1;i++) lvl->fiu[i]=NULL;
}
void creaza(int niv, nod *lvl)
{
if(niv==-1){
lvl->ok=i;
return;
}
bool ca=aux[niv];
nod *r;
r=lvl->fiu[ca];
if(r==NULL)
{
r=new nod;reset(r);
lvl->fiu[ca]=r;
}
creaza(niv-1, r);
}
void cauta(int niv, nod *lvl,int sum)
{
if(niv==-1){
if(maxi<sum)
{
maxi=sum;
st=lvl->ok+1;
dr=i;
}
return;
}
bool ca=1-aux[niv];
nod *r;
r=lvl->fiu[ca];
if(r==NULL) r=lvl->fiu[1-ca];
else sum+=(1<<niv);
//if(r==NULL) return;
cauta(niv-1,r,sum);
}
int main()
{
fin>>n;
nod *b;
b=new nod; reset(b);
for(i=1;i<=n;i++)
{
fin>>a;ac^=a;
aux=ac;
if(i!=1) cauta(21,b,0);
creaza(21,b);
}
fout<<maxi<<" "<<st<<" "<<dr;
return 0;
}