Cod sursa(job #3353012)

Utilizator Tudor_ChelaruChelaru Tudor Tudor_Chelaru Data 3 mai 2026 15:22:28
Problema Xor Max Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <fstream>
using namespace std;
ifstream cin("xormax.in");
ofstream cout("xormax.out");
int n,v[100005],i,j,val=0,maxx=-1,st,dr;
struct nod
{
    int ind=0;
    nod* next[2]= {};
};
nod* root=new nod;
nod* aux;
void inserare(int nr,int index)
{
    nod* aux=root;
    int val;
    for(int i=23; i>=0; i--)
    {
        val=(1<<i)&nr;
        if(val!=0)
            val=1;
        if(aux->next[val]==NULL)
            aux->next[val]=new nod;
        aux=aux->next[val];
    }
    aux->ind=index;
}
int main()
{
    cin>>n;
    for(i=1; i<=n; i++)
    {
        cin>>v[i];
        v[i]^=v[i-1];
        inserare(v[i],i);
    }
    for(i=1; i<=n; i++)
    {
        aux=root;
        for(j=23; j>=0; j--)
        {
            val=(1<<j)&v[i];
            if(val!=0)
                val=1;
            if(aux->next[1-val]!=NULL)
                aux=aux->next[1-val];
            else
                aux=aux->next[val];
        }
        if(v[i]^v[aux->ind]>maxx)
        {
            maxx=v[i]^v[aux->ind];
            st=min(i,aux->ind);
            dr=max(i,aux->ind);
        }
        else if(v[i]^v[aux->ind]==maxx && max(i,aux->ind)<dr)
        {
            st=min(i,aux->ind);
            dr=max(i,aux->ind);
        }
        else if(v[i]^v[aux->ind]==maxx && max(i,aux->ind)==dr && min(i,aux->ind)>st)
        {
            st=min(i,aux->ind);
            dr=max(i,aux->ind);
        }
    }
    cout<<maxx<<' '<<st+1<<' '<<dr;
    return 0;
}