小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏。
每个时刻她会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且让小葱从自己手中的小葱苗里选出一些小葱苗使得选出的小葱苗上的数字的异或和最大。
这种小问题对于小葱来说当然不在话下,但是他的身边没有电脑,于是他打电话给同为Oi选手的你,你能帮帮他吗?
你只需要输出最大的异或和即可,若小葱手中没有小葱苗则输出0。
Input
第一行一个正整数n表示总时间;第二行n个整数a1,a2…an,若ai大于0代表给了小葱一颗数字为ai的小葱苗,否则代表从小葱手中拿走一颗数字为-ai的小葱苗。
Output
输出共n行,每行一个整数代表第i个时刻的最大异或和。
Note
N ≤ 500000 , A i ≤ 2 31 − 1 Nleq 500000,A_ileq 2^{31}-1 N≤500000,Ai≤231−1
线性基是很难删除的,可以用线段树分治,我们求出每一个值覆盖的时间范围,把它打到线段树上,然后再跑一边线段树,这样就只需要修改了,带着线性基让下传,在 l = r l=r l=r时就询问。
至于求出一个覆盖的时间范围,我用的是 m a p map map套 v e c t o r vector
本文发布于:2024-02-03 07:47:42,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170691766449637.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |