Submission #101908


Source Code Expand

#include <cstdio>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#define rep(i, n) for(int i = 0; i < (n); ++i)
#define mp make_pair
#define all(v) (v).begin(), (v).end()
using namespace std;
typedef pair<int,int> P;
typedef pair<int,P> Q;

const int MX = 100005, n20 = 1<<20;

int a[MX];
int ans, as, at;
int t[MX*20][2], ti, o[MX*20];

void add(int x, int no){
    int v = 0;
    for(int i = 19; i >= 0; i--){
        int y = (x>>i&1);
        if(t[v][y] == -1){
            t[v][y] = ti;
            v = ti++;
            o[v] = no;
            t[v][0] = -1;
            t[v][1] = -1;
        } else {
            v = t[v][y];
        }
    }
}

void sch(int x, int no){
    int v = 0, s = x;
    for(int i = 19; i >= 0; i--){
        int y = !(x>>i&1);
        if(t[v][y] != -1 && o[t[v][y]] <= no){
            v = t[v][y];
            s ^= (y<<i);
        } else if(t[v][y^1] != -1 && o[t[v][y^1]] <= no){
            v = t[v][y^1];
            s ^= ((y^1)<<i);
        } else {
            if(x >= ans){
                ans = x;
                as = 1; at = no+1;
                return;
            }
        }
    }
    
    if(s > ans || (s==ans && o[v]+1 <= as)){
        ans = s;
        as = o[v]+1; at = no+1;
    }
}

int main(){
	int n;
	scanf("%d",&n);
    int sum = 0;
    t[ti][0] = -1;
    t[ti++][1] = -1;
    ans = -1;
    
    rep(i,n){
        scanf("%d",&a[i]);
        add(sum,i);
        sum ^= a[i];
    }
    
    for(int i = n-1; i >= 0; i--){
        sch(sum,i);
        sum ^= a[i];
    }
	
	printf("%d %d %d\n", ans, as, at);
    
	return 0;
}

Submission Info

Submission Time
Task F - Maximum Segment XOR
User nikyaudo
Language C++ (G++ 4.6.4)
Score 100
Code Size 1681 Byte
Status AC
Exec Time 97 ms
Memory 6364 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:62:16: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
./Main.cpp:69:26: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-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 20 ms 800 KB
10 AC 20 ms 800 KB
11 AC 20 ms 764 KB
12 AC 20 ms 672 KB
13 AC 24 ms 1440 KB
14 AC 25 ms 1320 KB
15 AC 25 ms 1572 KB
16 AC 58 ms 3228 KB
17 AC 38 ms 3108 KB
18 AC 97 ms 6364 KB
19 AC 20 ms 796 KB
2 AC 20 ms 704 KB
20 AC 20 ms 704 KB
21 AC 19 ms 752 KB
22 AC 19 ms 696 KB
23 AC 19 ms 752 KB
24 AC 20 ms 804 KB
25 AC 22 ms 928 KB
26 AC 19 ms 804 KB
27 AC 22 ms 1060 KB
28 AC 63 ms 4128 KB
29 AC 69 ms 4512 KB
3 AC 20 ms 808 KB
30 AC 47 ms 3240 KB
31 AC 84 ms 4836 KB
4 AC 19 ms 700 KB
5 AC 20 ms 808 KB
6 AC 19 ms 700 KB
7 AC 18 ms 692 KB
8 AC 19 ms 708 KB
9 AC 20 ms 928 KB