
鍏堟槸绱姞錛坸or錛屼竴寮濮嬬湡鍐欐垚+浜嗭紝緇撴灉鏌ヤ簡閭d箞涔呫傘傘傘傦級
鐒跺悗浣滃樊錛屾劅瑙夌被浼煎崟璋僁P錛屾湁涓綾誨崟璋僁P浣跨敤騫寵 鏍戠殑錛屼絾榪欎釜涓嶉渶瑕佺敤騫寵 鏍戯紝鍙鐢╰ire鏍戙?br />鑰冭檻鍒?/1鎬у拰鏈鍧忔儏鍐典笅鏍戠殑瀵嗛泦搴︼紝浜庢槸鍐欎簡闈欐佸畬鍏ㄤ簩鍙夋爲銆傘傘傘?br />浜庢槸MLE錛岀劧鍚庨檷浣巑axa錛孯T錛屽悓鏃墮檷浣巑axt錛學A銆?br />鐒跺悗宸﹀彸鏂熼厡鎻愪氦澶氭錛孧LE鎴朩A銆?br />鏈鍚庡崱甯告暟錛屾妸鏍戠殑鍓峬axt-1灞傜敤bool錛屾渶鍚庝竴灞傜敤int銆傘傘傘傘侫C浜嗐傘傘傘傘?

琚敼孌嬬殑浠g爜

/**//*
USER:zyn19961
TASK:cowxor
LANG:C++
*/
#include<cstdio>
#include<cstring>
#include<fstream>
#include<iostream>
#include<algorithm>
using namespace std;
//
#define MM(a,i) memset((a),i,sizeof(a))
#define FOR(i,l,r) for (int i=(l);i<=(r);i++)
#define DFOR(i,r,l) for (int i=(r);i>=(l);i--)
//
typedef long long int64;
const int INF=~0U>>2;
const int maxa=(8388608+2)/2;
const int maxt=20;
const int maxn=100001;
//
ifstream fin("cowxor.in");
ofstream fout("cowxor.out");
//
int bit[maxt+1];
bool tree[maxa];
int treen[maxa/2];
int aa[maxn];
int ans=0,ansa=1,ansb=1;
void insert(int i);//left:0 right:1
void match(int i);
void show();

int main()
{
MM(bit,0),MM(tree,0),MM(aa,0);
int n,t;
fin>>n;
bit[0]=1;
FOR(i,1,maxt)bit[i]=bit[i-1]*2;

aa[0]=0;FOR(i,1,n)
{
fin>>aa[i];
if(aa[i]>ans)ans=aa[i],ansa=ansb=i;
aa[i]^=aa[i-1];
}

FOR(i,0,n)
{
match(i);
insert(i);
}
fout<<ans<<" "<<ansa<<" "<<ansb<<"\n";
fin.close();
fout.close();
return 0;
}

void insert(int i)
{
int p=1,s=aa[i];

DFOR(t,maxt,0)
{
tree[p]=1;
if(s&bit[t])p=p*2+1;else p=p*2;
}tree[p]=1;
if(s==0)tree[p]=-1;
else treen[p-maxa/2]=i;
}

void match(int i)
{
int anss=0,q,p=1,s=aa[i];

DFOR(t,maxt,0)
{
q=(s&bit[t])/bit[t];
q^=1;
if(q)if(tree[p*2+1])p=p*2+1,anss+=bit[t];
else p*=2;
else if(tree[p*2])p*=2,anss+=bit[t];
else p=p*2+1;
}
if(anss>ans)ans=anss,ansa=treen[p-maxa/2]+1,ansb=i;
}

void show()
{

FOR(i,0,maxt+1)
{

FOR(j,1<<i,(1<<(i+1))-1)
{
printf("%d ",tree[j]);
}
printf("\n");
}
}

USACO鐨勭┖闂撮檺鍒跺埌搴曟槸澶氬皯錛燂紵錛燂紵