Xor 特殊情况_题解

【题解提供者】吴立强

解法

思路

注意到对于单次的查询区间 [ l , r ] [l,r] [l,r],可以通过前缀异或和拆分为两个新的区间查询: [ 0 , l − 1 ] , [ 0 , r ] [0, l-1], [0,r] [0,l−1],[0,r]。

对于任意区间 [ 0 , R ] [0,R] [0,R] 可以找到最大的 x x x( x ≤ R x \le R x≤R 且 x m o d    4 = 0 x\mod 4 = 0 xmod4=0), [ 0 , R ] [0,R] [0,R] 的异或和等价于 [ x , R ] [x,R] [x,R] 的异或和。(根据上一题题解中的【拓展】可以求证此结论)

代码展示

cpp 复制代码
#include <iostream>
using namespace std;

int get(int x) {
    if(x < 0) return 0;
    int ans = 0;
    for(int i = x / 4 * 4; i <= x; i ++) ans ^= i;
    return ans;
}
int main() {
    int t;  cin >> t;
    while(t --) {
        int l, r;  cin >> l >> r;
        cout << (get(l - 1) ^ get(r)) << endl;
    }
    return 0;
}

算法分析

程序时间复杂度为 O ( t ) O(t) O(t)。

相关推荐
鹿角片ljp8 分钟前
力扣140.快慢指针法求解链表倒数第K个节点
算法·leetcode·链表
自由生长202426 分钟前
位运算第1篇-异或运算-快速找出重复数字
算法
xxxxxmy1 小时前
同向双指针(滑动窗口)
python·算法·滑动窗口·同向双指针
释怀°Believe1 小时前
Daily算法刷题【面试经典150题-5️⃣图】
算法·面试·深度优先
List<String> error_P1 小时前
数据结构:链表-单向链表篇
算法·链表
ss2731 小时前
ConcurrentHashMap:扩容机制与size()方法
算法·哈希算法
2401_860319521 小时前
在React Native鸿蒙跨平台开发中实现一个冒泡排序算法并将其应用于数据排序,如何进行复制数组以避免直接修改状态中的数组
javascript·算法·react native·react.js·harmonyos
im_AMBER1 小时前
Leetcode 72 数组列表中的最大距离
c++·笔记·学习·算法·leetcode
编程饭碗1 小时前
【Java循环】
java·服务器·算法
曾几何时`2 小时前
归并排序(一)
数据结构·算法·leetcode