Submission #3644497


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;

const int N=1<<20;
int qsz=0;
queue<int> que[100005];
int cnt[1<<21];
int id[1<<21];
int a[100005];
int sum[100005];

void init(){
    memset(id,-1,sizeof(id));
}

void add(int v,int idz){
    v+=N-1;
    cnt[v]++;
    if(id[v]==-1){
        id[v]=qsz++;
    }
    //printf("%d\n",id[v]);
    que[id[v]].push(idz);
    while(v>0){
        v=(v-1)/2;
        cnt[v]=cnt[v*2+1]+cnt[v*2+2];
    }
}

void del(int v){
    v+=N-1;
    cnt[v]--;
    que[id[v]].pop();
    while(v>0){
        v=(v-1)/2;
        cnt[v]=cnt[v*2+1]+cnt[v*2+2];
    }
}

P query(int v){
    int cur=0;
    P ans=P(0,-1);
    int k=0;
    for(int i=19;i>=0;i--){
        int b=1-((v>>i)&1);
        int nxt=k*2+1+b;
        if(cnt[nxt]==0){
            nxt=k*2+1+(1-b);
        }else{
            ans.first+=(1<<i);
        }
        k=nxt;
    }
    //printf("%d %d\n",k,N);
    ans.second=que[id[k]].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 100
Code Size 1626 Byte
Status AC
Exec Time 107 ms
Memory 84608 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:65:19: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d",&n);
                   ^
./Main.cpp:68: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 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 57 ms 81792 KB
10 AC 57 ms 83840 KB
11 AC 58 ms 83840 KB
12 AC 57 ms 83840 KB
13 AC 60 ms 83840 KB
14 AC 60 ms 83840 KB
15 AC 61 ms 83840 KB
16 AC 79 ms 82176 KB
17 AC 71 ms 84096 KB
18 AC 107 ms 84608 KB
19 AC 57 ms 81792 KB
2 AC 57 ms 81792 KB
20 AC 57 ms 81792 KB
21 AC 57 ms 81792 KB
22 AC 57 ms 81792 KB
23 AC 57 ms 81792 KB
24 AC 57 ms 81792 KB
25 AC 58 ms 81792 KB
26 AC 57 ms 81792 KB
27 AC 59 ms 81792 KB
28 AC 86 ms 84352 KB
29 AC 89 ms 84352 KB
3 AC 57 ms 81792 KB
30 AC 76 ms 84224 KB
31 AC 103 ms 84608 KB
4 AC 57 ms 81792 KB
5 AC 57 ms 81792 KB
6 AC 58 ms 83840 KB
7 AC 57 ms 83840 KB
8 AC 59 ms 83840 KB
9 AC 58 ms 81792 KB