Cod sursa(job #1882113)

Utilizator CrystyAngelDinu Cristian CrystyAngel Data 16 februarie 2017 22:56:32
Problema Xor Max Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <fstream>
#include <iostream>

using namespace std;

ifstream fin("xormax.in");
ofstream fout("xormax.out");

int curr[25];
int v[100100];
int h[1<<22];
int n,mx,start,stop,i,j,nod;

int main()
{
    fin>>n;
    for(i=1; i<=n; ++i)
    {
        fin>>v[i];
        v[i]^=v[i-1];
        for(j=20; j>=0; --j)
            curr[20-j]=(bool)(v[i]&(1<<j));
        nod=1;
        for(j=0; j<21; ++j)
            if(h[(nod<<1)+!curr[j]])
                nod=(nod<<1)+!curr[j];
            else
                nod=(nod<<1)+curr[j];
        j=h[nod];
        if((v[j]^v[i])>mx)
        {
            mx=v[j]^v[i];
            start=j+1;
            stop=i;
        }
        nod=1;
        for(j=0; j<21; ++j)
            h[nod=(nod<<1)+curr[j]]=i;
    }
    fout<<mx<<' '<<start<<' '<<stop;
}