求q次询问下最短异或和为0子区间长度。 根据异或性质容易将条件转化为前缀和 sum[l-1]=sum[r] 的形式,用数组a记录一下前缀异或和最近出现的位置,则问题可以转化为维护单点贡献的形式。 考虑从1移动右端点,则随着右端的更新,将以此端点结尾的对应区间长度值赋给下标为左端点的求值数组,这样就可以使对区间的访问变为对左端点贡献的访问,询问答案即为对求值数组中区间 [l,r] 中最小值的查询,用线段树维护即可。 根据更新顺序,只能采用按r值从小到大的离线询问。 代码如下: #include<bits/stdc++.h> #define ls p<<1,l,mid #d...