Submission #101895


Source Code Expand

#include <cstdio>

int N;
typedef struct {
	int v0;
	int v1;
	int nd;
}sts;
sts st[2000002];
int as[100002];
int sum[100002];
int sz;
void newv(void) {
	st[sz].v0=-1;
	st[sz].v1=-1;
	st[sz].nd=N+1;
	sz++;
}
void add(int num,int vl) {
	int id=0;
	for(int j=19;j>=0;j--) {
		if(vl&(1<<j)) {
			if(st[id].v1<0) {
				st[id].v1=sz;
				id=sz;
				newv();
			} else {
				id=st[id].v1;
			}
		} else {
			if(st[id].v0<0) {
				st[id].v0=sz;
				id=sz;
				newv();
			} else {
				id=st[id].v0;
			}
		}
		if(st[id].nd>num) st[id].nd=num;
	}
}
int pl2=0;
int calc(int vl) {
	int id=0;
	int ret=0;
	for(int j=19;j>=0;j--) {
		if(vl&(1<<j)) {
			if(st[id].v1<0) {
				id=st[id].v0;
			} else {
				id=st[id].v1;
				ret+=(1<<j);
			}
		} else {
			if(st[id].v0<0) {
				id=st[id].v1;
			} else {
				id=st[id].v0;
				ret+=(1<<j);
			}
		}
	}
	pl2=st[id].nd;
	return ret;
}
int main() {
	scanf("%d",&N);
	newv();
	for(int i=1;i<=N;i++) {
		scanf("%d",&as[i]);
		sum[i]=as[i];
		if(i>1) sum[i]=as[i]^sum[i-1];
		add(i,sum[i]);
	}
	int mx=-1; int lf=0; int rg=0;
	for(int i=0;i<=N;i++) {
		int inv=((1<<20)-1)^sum[i];
		int calcret=calc(inv);
		if(mx<calcret) {
			mx=calcret;
			lf=i;
			rg=pl2;
		} else {
			if(mx==calcret) {
				if(i<lf) {
					lf=i;
					rg=pl2;
				} else {
					if(i==lf) {
						if(pl2<rg) pl2=rg;
					}
				}
			}
		}
	}
	printf("%d %d %d\n",mx,lf+1,rg);
	return 0;
}

Submission Info

Submission Time
Task F - Maximum Segment XOR
User phidnight
Language C++ (GCC 4.4.7)
Score 100
Code Size 1483 Byte
Status AC
Exec Time 108 ms
Memory 6884 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:67: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result
./Main.cpp:70: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result

Judge Result

Set Name All
Score / Max Score 100 / 100
Status
AC × 31
Set Name Test Cases
All 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 3, 30, 31, 4, 5, 6, 7, 8, 9
Case Name Status Exec Time Memory
1 AC 21 ms 932 KB
10 AC 22 ms 868 KB
11 AC 20 ms 804 KB
12 AC 21 ms 804 KB
13 AC 24 ms 1444 KB
14 AC 26 ms 1436 KB
15 AC 28 ms 1584 KB
16 AC 62 ms 3492 KB
17 AC 48 ms 3228 KB
18 AC 108 ms 6884 KB
19 AC 20 ms 924 KB
2 AC 19 ms 928 KB
20 AC 20 ms 804 KB
21 AC 20 ms 796 KB
22 AC 23 ms 772 KB
23 AC 22 ms 804 KB
24 AC 22 ms 740 KB
25 AC 22 ms 928 KB
26 AC 22 ms 812 KB
27 AC 25 ms 1060 KB
28 AC 72 ms 4516 KB
29 AC 79 ms 4896 KB
3 AC 21 ms 932 KB
30 AC 57 ms 3544 KB
31 AC 103 ms 5288 KB
4 AC 21 ms 808 KB
5 AC 21 ms 932 KB
6 AC 21 ms 812 KB
7 AC 20 ms 800 KB
8 AC 21 ms 932 KB
9 AC 20 ms 924 KB