给你一个序列,每次可以选择一个数
x
x
x,将
[
l
,
r
]
[l,r]
[l,r]段内所有数异或上
x
x
x,花费
⌈
r
−
l
+
1
2
⌉
\lceil \frac{r-l+1}2{}\rceil
⌈2r−l+1⌉,问最少花费多少能够让整个序列都变成0
可以发现在区间上处理不会优于区间内部
根据异或性质,
x
⨁
x
⨁
x
=
x
x\bigoplus x\bigoplus x=x
x⨁x⨁x=x,我们可以枚举两个区间端点
i
,
j
,
0
≤
j
<
i
i,j,0\leq j<i
i,j,0≤j<i,如果
p
r
e
[
i
]
⨁
p
r
e
[
j
]
=
0
pre[i]\bigoplus pre[j]=0
pre[i]⨁pre[j]=0,那么说明
[
j
+
1
,
i
]
[j+1,i]
[j+1,i]区间可以在前面基础上再
i
−
j
−
1
i-j-1
i−j−1次异或全部成为0.
(
i
−
j
−
1
+
1
−
1
)
(i-j-1+1-1)
(i−j−1+1−1)
设
f
[
i
]
f[i]
f[i]表示前
i
i
i个数处理的最少次数,那么我们能够写出
O
(
n
2
)
O(n^2)
O(n2)的代码