Pagini recente » Profil M@2Te4i | Cod sursa (job #1755540) | Cod sursa (job #1621359) | Cod sursa (job #200652) | Cod sursa (job #788879)
Cod sursa(job #788879)
#include <fstream>
using namespace std;
ifstream f("xormax.in");
ofstream g("xormax.out");
struct Trie
{
int P;
Trie *Son[2];
Trie ()
{
P=0;
Son[0]=Son[1]=0;
}
} *T=new Trie();
int N,i;
int X,S,Y,P;
int ANS=-1;
int SANS,FANS=0;
void Insert (Trie *T, int V, int p)
{
if (p==0)
{
T->P=P;
return;
}
p--;
int v=(V&(1<<p))>0;
if (T->Son[v]==0)
T->Son[v]=new Trie();
Insert(T->Son[v],V,p);
}
void Search (Trie *T, int V, int p)
{
if (p==0)
{
P=T->P;
return;
}
p--;
int v=(V&(1<<p))>0;
if (T->Son[1-v])
{
if (1-v) Y|=1<<p;
Search(T->Son[1-v],V,p);
}
else
{
if (v) Y|=1<<p;
Search(T->Son[v],V,p);
}
}
int main ()
{
f >> N;
P=0;
Insert(T,0,21);
for (i=1; i<=N; i++)
{
f >> X;
S^=X;
Y=0;
P=0;
Search(T,S,21);
if ((S^Y)>ANS || ((S^Y)==ANS && FANS-SANS>i-P))
{
ANS=S^Y;
SANS=P;
FANS=i;
}
P=i;
Insert(T,S,21);
}
g << ANS << ' ' << SANS+1 << ' ' << FANS << '\n';
f.close();
g.close();
return 0;
}