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)。

相关推荐
蓝色汪洋5 分钟前
luogu填坑
开发语言·c++·算法
小年糕是糕手19 分钟前
【C++同步练习】类和对象(三)
开发语言·jvm·c++·程序人生·考研·算法·改行学it
jllws119 分钟前
数据结构_输入法的实现&五笔输入法浅析
数据结构
Learner__Q20 分钟前
每天五分钟:leetcode动态规划-递归与递推_day2
算法·深度优先
代码游侠24 分钟前
学习笔记——Linux内核链表
linux·运维·笔记·学习·算法·链表
发疯幼稚鬼26 分钟前
插入排序与冒泡排序
c语言·数据结构·算法·排序算法
小年糕是糕手29 分钟前
【C++同步练习】内存管理
开发语言·jvm·数据结构·c++·程序人生·算法·改行学it
蒙奇D索大30 分钟前
【数据结构】考研408|从B树到B+树:多路平衡的优化形态与数据库索引基石
数据结构·笔记·b树·学习·考研
不会代码的小猴30 分钟前
C++的第十五天笔记
数据结构·c++·笔记
灵感__idea40 分钟前
Hello 算法:以“快”著称的哈希
前端·javascript·算法