Submission #3644396


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i,n) for(int (i)=0;(i)<(int)(n);++(i))
#define all(x) (x).begin(),(x).end()
typedef pair<int,int> P;

struct Trie{
    int cnt;
    int to[2];
    int id;
    Trie(){
    }
};

int sz=1;
int qsz=0;
queue<int> que[100005];
Trie t[1<<22];
int a[100005];
int sum[100005];

void init(){
    for(int i=0;i<(1<<22);i++){
        t[i].cnt=0;
        t[i].to[0]=-1;
        t[i].to[1]=-1;
        t[i].id=-1;
    }
}

void add(int v,int id){
    int cur=0;
    for(int i=20;i>=0;i--){
        t[cur].cnt++;
        int b=(v>>i)&1;
       // printf("add %d %d %d\n",v,i,b);
        if(t[cur].to[b]==-1){
            t[cur].to[b]=sz++;
        }
        cur=t[cur].to[b];
    }
    t[cur].cnt++;
    if(t[cur].id==-1)t[cur].id=qsz++;
    que[t[cur].id].push(id);
}

void del(int v){
    int cur=0;
    for(int i=20;i>=0;i--){
        t[cur].cnt--;
        int b=(v>>i)&1;
        if(t[cur].to[b]==-1){
            t[cur].to[b]=sz++;
        }
        cur=t[cur].to[b];
    }
    t[cur].cnt--;
    que[t[cur].id].pop();
}

P query(int v){
    int cur=0;
    P ans=P(0,-1);
    for(int i=20;i>=0;i--){
        int b=1-((v>>i)&1);
        int nxt=t[cur].to[b];
       // printf("%d %d %d\n",i,b,nxt);
        if(nxt==-1 || t[nxt].cnt==0){
            nxt=t[cur].to[1-b];
        }else{
            ans.first+=(1<<i);
        }
        cur=nxt;
    }
    ans.second=que[t[cur].id].front();
    return ans;
}

int main(){
    int n;
    scanf("%d",&n);
    init();
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
        sum[i+1]+=sum[i];
        sum[i+1]^=a[i];
        add(sum[i+1],i+1);
    }
    int ans=-1;
    P p=P(0,0);
    for(int i=0;i<n;i++){
        P q=query(sum[i]);
        if(q.first>ans){
            ans=q.first;
            p=P(i+1,q.second);
        }
        del(sum[i+1]);
    }
    printf("%d %d %d\n",ans,p.first,p.second);
    return 0;
}

Submission Info

Submission Time
Task F - Maximum Segment XOR
User WAsedAC1
Language C++14 (GCC 5.4.1)
Score 0
Code Size 2034 Byte
Status MLE
Exec Time 162 ms
Memory 133760 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:82:19: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d",&n);
                   ^
./Main.cpp:85:26: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d",&a[i]);
                          ^

Judge Result

Set Name All
Score / Max Score 0 / 100
Status
MLE × 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 MLE 89 ms 132992 KB
10 MLE 89 ms 132992 KB
11 MLE 90 ms 132992 KB
12 MLE 90 ms 132992 KB
13 MLE 94 ms 132992 KB
14 MLE 94 ms 132992 KB
15 MLE 94 ms 132992 KB
16 MLE 128 ms 133376 KB
17 MLE 110 ms 133248 KB
18 MLE 162 ms 133760 KB
19 MLE 89 ms 132992 KB
2 MLE 89 ms 132992 KB
20 MLE 90 ms 132992 KB
21 MLE 90 ms 132992 KB
22 MLE 90 ms 132992 KB
23 MLE 89 ms 132992 KB
24 MLE 90 ms 132992 KB
25 MLE 92 ms 132992 KB
26 MLE 91 ms 132992 KB
27 MLE 94 ms 132992 KB
28 MLE 136 ms 133504 KB
29 MLE 142 ms 133504 KB
3 MLE 89 ms 132992 KB
30 MLE 121 ms 133376 KB
31 MLE 162 ms 133760 KB
4 MLE 90 ms 132992 KB
5 MLE 89 ms 132992 KB
6 MLE 89 ms 132992 KB
7 MLE 90 ms 132992 KB
8 MLE 90 ms 132992 KB
9 MLE 90 ms 132992 KB