Submission #17473

#TimeUsernameProblemLanguageResultExecution timeMemory
17473gs14004XOR (IZhO12_xor)C++14
100 / 100
721 ms195100 KiB
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <limits.h> #include <stack> #include <queue> #include <map> #include <set> #include <algorithm> #include <string> #include <functional> #include <vector> #include <numeric> #include <deque> #include <utility> #include <bitset> #include <iostream> using namespace std; typedef long long lint; typedef long double llf; typedef pair<int, int> pi; int n, x; struct node{ node *ls, *rs; int minv; node(){ ls = rs = NULL; minv = 1e9; } }*root; void add(node *p, int pos, int val, int dep){ if(dep == -1){ p->minv = min(p->minv, val); return; } if(!p->ls) p->ls = new node(); if(!p->rs) p->rs = new node(); if((pos >> dep) % 2 == 0){ add(p->ls, pos, val, dep-1); } if((pos >> dep) % 2 == 1){ add(p->rs, pos, val, dep-1); } p->minv = min(p->ls->minv, p->rs->minv); } int query(node *p, int pos, int dep){ if(dep == -1) return p->minv; if(!p->ls) p->ls = new node(); if(!p->rs) p->rs = new node(); bool b1 = (pos >> dep) & 1, b2 = (x >> dep) & 1; if(!b1 && !b2) return min(p->rs->minv, query(p->ls, pos, dep-1)); if(b1 && !b2) return min(p->ls->minv, query(p->rs, pos, dep-1)); if(!b1 && b2) return query(p->rs, pos, dep-1); if(b1 && b2) return query(p->ls, pos, dep-1); } int main(){ root = new node(); cin >> n >> x; add(root, 0, 0, 29); int pxor = 0; int ret = 0, retp = 0; for(int i=1; i<=n; i++){ add(root, pxor, i-1, 29); int t; scanf("%d",&t); pxor ^= t; int tmp = i - query(root, pxor, 29); if(ret < tmp){ ret = tmp; retp = i; } } cout << retp - ret + 1 << " " << ret; }
#Verdict Execution timeMemoryGrader output
Fetching results...