Cod sursa(job #3339136)

Utilizator Dia3141Costea Diana Stefania Dia3141 Data 6 februarie 2026 15:41:47
Problema Xor Max Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>
#define nmax (int)(1e6+1)
using namespace std;
ifstream cin("xormax.in");
ofstream cout("xormax.out");
int v[nmax],n,sol,ans,st,dr,p;
struct nod{
    int poz;
    nod* fr[2];
    nod(){
        poz=-1;
        fr[0]=fr[1]=nullptr;
    }
};
nod* root=new nod;
void add(nod* n,int val,int k,int nr){
    if(k==-1){
        (*n).poz=nr;
        return ;
    }
    int bit=(val>>k)&1;
    if((*n).fr[bit]==nullptr)
        (*n).fr[bit]=new nod;
    add((*n).fr[bit],val,k-1,nr);
}
void query(nod* n,int val,int k){
    if(k==-1){
        p=(*n).poz;
        return ;
    }
    int bit=(val>>k)&1;
    if((*n).fr[1-bit]!=nullptr)
        query((*n).fr[1-bit],val,k-1);
    else
        query((*n).fr[bit],val,k-1);
}
signed main()
{
    cin>>n;
    add(root,0,21,0);
    for(int i=1;i<=n;i++){
        cin>>v[i];
        v[i]^=v[i-1];
        p=0;
        query(root,v[i],21);
        ans=v[i]^v[p];
        p++;
        if(ans>sol){
            sol=ans;
            st=p;
            dr=i;
        }
        add(root,v[i],21,i);
    }
    cout<<sol<<" "<<st<<" "<<dr;
    return 0;
}