Warmup:Upanishad (吉林省赛) (异或的减法思维,排序预处理,后按顺序处理, 树状数组,贪心第把数往后面放)
思路:
- 第一眼看到这个题,就准备直接用莫队去做, 每一次l ,r 第一次遇到一个数的次数是奇数就不做处理, 之后就要^异或一下来处理, 次数是偶数本来就要处理, 就不用说了, 这样就符合题意
- 不过出题人,把莫队卡掉了
- 首先可以根据异或性质 把问题转化为
- A 通过前缀思想处理
- B通过对询问排序后处理
- 对R进行从小到大排序
- 问的是不同的元素异或和,而且我们的r是一直慢慢增大的
- 所以贪心地让数放在最右边,这样在查询 L 的时候就可以把那个数包含进去, 而且 求不同的元素, 于是只需要那个一个数就行
- 保存一个lstval所在的位置, 用于更新 val[r] 时(把元素放在右边) 删除之前的那个点,
- 此时查询和修改L,R的不同的元素异或, 利用 树状数组处理即可