Cod sursa(job #1081007)

Utilizator hevelebalazshevele balazs hevelebalazs Data 13 ianuarie 2014 07:49:54
Problema Xor Max Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <stdio.h>
#define fr(i,a,b) for(int i=a;i<b;++i)
#define L 20

struct T{
    T*c[2];int l;
    T(int _l){l=_l;c[0]=c[1]=0;}
    }*root;

inline void push(int i,int n){
    T*t=root;
    int b=21;
    while(b--){
        bool d=(i&(1<<b));
        if(!(t->c[d])) t->c[d]=new T(n);
        t=t->c[d];
        }
    t->l=n;
    }

inline int get(int i,int *m){
    int g=0;
    T*t=root;
    int b=21;
    while(b--){
        bool d=(i&(1<<b));
        if(t->c[!d]) t=t->c[!d],g+=(1<<b);
        else t=t->c[d];
        }
    *m=t->l;
    return g;
    }

int main(){
    freopen("xormax.in","r",stdin);
    freopen("xormax.out","w",stdout);
    root=new T(0);
    push(0,-1);
    int n,x,s=0;
    int mv=0,mb=-1,me=0;
    scanf("%i",&n);
    fr(i,0,n){
        scanf("%i",&x);
        s^=x;
        int v,b;
        v=get(s,&b);
        if(v>mv) mv=v,me=i,mb=b;
        push(s,i);
        }
    printf("%i %i %i",mv,mb+2,me+1);
    return 0;
    }