Pagini recente » Cod sursa (job #873752) | Cod sursa (job #1124473) | Cod sursa (job #2100783) | Cod sursa (job #2673244) | Cod sursa (job #2484355)
#include<bits/stdc++.h>
#define nmax 100005
using namespace std;
ifstream in("xormax.in");
ofstream out("xormax.out");
struct nod{
nod *n[2];
int poz;
nod(){
memset(n,0,sizeof(n));
}
};
int n,v[nmax];
nod *t = new nod;
void add(int pz){
nod *p = t;
for(int i=20; i>=0; i--){
if(v[pz]&(1<<i)){
if(!(p->n[1])){
p->n[1] = new nod;
}
p = p->n[1];
}
else{
if(!(p->n[0])){
p->n[0] = new nod;
}
p = p->n[0];
}
}
p->poz=pz;
}
int fnd_max(int poz){
nod *p = t;
for(int i=20; i>=0; i--){
if(v[poz]&(1<<i)){
if(!(p->n[0])){
p = p->n[1];
}
else{
p = p->n[0];
}
}
else{
if(!(p->n[1])){
p = p->n[0];
}
else{
p = p->n[1];
}
}
}
return p->poz;
}
int main(){
in >> n;
add(0);
int ma=-1,a=-1,b=-1;
for(int i=1; i<=n; i++){
in >> v[i];
v[i]=v[i]^v[i-1];
int poz = fnd_max(i);
int val = v[poz]^v[i];
if(ma<val){
ma = val;
a = poz;
b = i;
}
else if(ma==val){
b = i;
a = poz;
}
add(i);
}
out << ma << ' ' << a+1 << ' ' << b;
}