记录编号 |
203663 |
评测结果 |
EEEEEEEEEE |
题目名称 |
平凡的数据范围 |
最终得分 |
0 |
用户昵称 |
KZNS |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
0.916 s |
提交时间 |
2015-11-03 14:34:50 |
内存使用 |
11.76 MiB |
显示代码纯文本
// KZ's
#include <fstream>
using namespace std;
ifstream fin ("xor_equ.in");
ofstream fout ("xor_equ.out");
///////
int n,tr[1500000][2]={0},tru=2,trh=0,troot=1;
unsigned long long e;
///////
void ckin(int i,unsigned long long &u,int c,unsigned long long &e) {
if (!c)
return;
if (u&(1<<(c-1)))
if (tr[i][0]) {
e<<=1;
e|=1;
ckin(tr[i][0],u,c-1,e);
}
else {
e<<=1;
ckin(tr[i][1],u,c-1,e);
}
else
if (tr[i][1]) {
e<<=1;
e|=1;
ckin(tr[i][1],u,c-1,e);
}
else {
e<<=1;
ckin(tr[i][0],u,c-1,e);
}
}
unsigned long long ck (unsigned long long u) {
unsigned long long e=u>>trh;
ckin(troot,u,trh,e);
return e;
}
void in(unsigned long long u) {
unsigned long long k=0;
int trhu=trh,tu=troot;
while (1) {
if (u&(1<<trh)) {
tr[tru][1]=troot;
troot=tru;
tru++;
trh++;
}
else {
if(u&((~k)<<trh)) {
tr[tru][0]=troot;
troot=tru;
tru++;
trh++;
}
else
break;
}
}
for (;trhu>0;trhu--) {
if (u&(1<<(trhu-1))) {
if (tr[tu][1])
tu=tr[tu][1];
else {
tr[tu][1]=tru;
tu=tru;
tru++;
}
}
else {
if (tr[tu][0])
tu=tr[tu][0];
else {
tr[tu][0]=tru;
tu=tru;
tru++;
}
}
}
}
void work() {
fin>>n;
unsigned long long u,ed,mx=0;
for (int i=0;i<n;i++) {
fin>>u;
ed=ck(u);
if (u>mx)
mx=u;
if (ed>mx)
mx=ed;
in(u);
in(ed);
}
fout<<mx<<endl;
}
/////////
int main() {
work();
return 0;
}
// UBWH