链接:https://www.nowcoder.com/acm/contest/81/E
来源:牛客网
题目描述
给一个1-base数组{a},有N次操作,每次操作会使一个位置无效。一个区间的权值定义为这个区间里选出一些数的异或和的最大值。求在每次操作前,所有不包含无效位置的区间的权值的最大值。
输入描述:
第一行读入一个正整数(1 <= n <= 105)
第二行读入n个正整数,第i个表示a[i](0<= a[i] <= 109)
第三行读入n个正整数,第i个表示x[i]即第i次操作的位置,保证x[i]互不相同。
输出描述:
输出n行答案
示例1
输入
复制
10
169 816 709 896 58 490 97 254 99 796
4 2 3 10 5 6 1 8 9 7
输出
复制
1023
994
994
994
490
490
254
254
99
97
题目大意:给定n个数的数组,然后每次删除一个位置,该位置就会变为无效位置,询问本次操作之前的没有无效位置的区间异或最大值。
题目思路:异或最大值,容易想到线性基,然后就是维护区间删数,不是很好删,所以我们就离线从后往前添加数,并查集,在添加一个数的时候,查看其左右点是否有值,两边都有则需要区间合并,两边都没有则插入自己区间,否则插入某一边。
AC代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include