Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
    }

}