int main(void){ int n,i; scanf("%d",&n); LL prefix=0,suffix=0,res=0; for(i=0;i<n;i++){ scanf("%lld",&A[i]); suffix^=A[i]; } /** for my test case std::string testfile; std::cin>>testfile; std::ifstream in(testfile); in>>n; for(i=0;i<n;i++){ in>>A[i]; suffix^=A[i]; } **/ init_node(0); used_node=1; insert_node(0LL);//when the prefix is empty for(i=0;i<n;i++){ prefix^=A[i]; suffix^=A[i]; insert_node(prefix); res=max(res,find_max_node(suffix)^suffix); } printf("%lld\n",res); return res; }
ptr_rbnode delete_node(ptr_rbnode root, rbtree_element_type_t val, int logging) { ptr_rbnode node = find_node(root, val); if (node) { ptr_rbnode left_max_node = NULL; if (node->left->nil == 0 && node->right->nil == 0) { left_max_node = find_max_node(node->left); node->val = left_max_node->val; node = left_max_node; } ptr_rbnode child = node->right->nil == 1 ? node->left : node->right; if (node->color == BLACK) { node->color = child->color; delete_one_child(node); } root = replace_node(root, child, node); free(node); return root; } else { if (logging) printf("%d is not in the tree\n", val); return root; } }