题意:
两个操作:
1.给区间[l,r][l,r][l,r]之间的数异或xxx
2.给区间[l,r][l,r][l,r]之间异或(x+(l−i))(x+(l-i) )(x+(l−i))
题解:
我们发现
对于1操作,直接差分即可
对于2操作,我们每次取 lowbit(x) ,设lowbit(x)为 2k2^k2k,
对于 i−l<2ki-l<2^ki−l<2k, axor(x+i−l)=axorxxor(i−l)a\ xor\ (x+i-l)=a\ xor \ x\ xor\ (i-l)a xor (x+i−l)=a xor x xor (i−l).
也就是说区间[l,l+2k)[l,l+2^k)[l,l+2k) ,先整体异或上xxx,再依次异或上0,1,2,3....,2k−10,1,2,3....,2^k-10,1,2,3....,2k−1
异或0,1,2,3....,2k−10,1,2,3....,2^k-10,1,2,3....,2k−1这个我们可以在起始点打一个标记即可,即bit[i][k]bit[i][k]bit[i][k]代表第i个位置开始依次异或上了[0,2k)[0,2^k)[0,2k),重复上述操作即可,然后对于剩余的一段单独处理一下。

下面说的是对于bit如何处理。

把下标从jjj开始长度为2i2^i2i的区间分解成 两个区间进行计算
分别为 区间[j,j+2i−1−1][j,j+2^{i-1} -1][j,j+2i−1−1] 分别异或[0,2i−1−1][ 0,2^{i-1} -1][0,2i−1−1]
区间[j+2i−1,j+j+2i−1][j+2^{i-1},j+j+2^i -1][j+2i−1,j+j+2i−1] 先分别异或[0,2i−1−1][0,2^{i-1} -1][0,2i−1−1],再同时异或上2i−12^{i-1}2i−1

#include<bits/stdc++.h>
#define endl '\n'
//#define int long long
using namespace std;
const int maxn=6e5+10;int a[maxn],b[maxn];
int bit[maxn][22];signed main()
{ios::sync_with_stdio(false);cin.tie(0);int n,m;cin>>n>>m;for(int i=1;i<=n;i++) cin>>a[i];while(m--){int opt,l,r,x;cin>>opt>>l>>r>>x;if(opt==0){b[l]^=x;b[r+1]^=x;}else{for(int i=0;i<=19;i++){if((x>>i&1)&&(l+(1<<i)-1)<=r){b[l]^=x;b[l+(1<<i)]^=x;  //差分bit[l][i]^=1;    //打标记 代表从这个位置开始[l,l+1,...l+2^(k) - 1] 分别异或了 [0,2,3,4...,2^(i)-1].l+=(1<<i);x+=(1<<i);}}for(int i=19;i>=0;i--){  //从大到小把剩余的块补起来if((l+(1<<i)-1)<=r){b[l]^=x;b[l+(1<<i)]^=x;  //同上操作bit[l][i]^=1;l+=(1<<i);x+=(1<<i);}}}}for(int i=19;i>=1;i--){for(int j=1;j<=n;j++){if(!bit[j][i]) continue;bit[j][i-1]^=1;bit[j+(1<<(i-1))][i-1]^=1;//把 1 ~ 2^k 分解成 两个区间进行计算//分别为  区间[j,j+2^(i-1) -1] 分别异或 [0,2^(i-1) -1]// 区间[j+2^(i-1),j+j+2^(i) -1]  先分别异或 [0,2^(i-1) -1],再同时异或上2^(i-1)b[j+(1<<(i-1))]^=(1<<(i-1));b[j+(1<<i)]^=(1<<(i-1));}}for(int i=1;i<=n;i++){b[i]^=b[i-1];cout<<(a[i]^b[i])<<" ";}}

2021牛客暑期多校训练营3 I-Kuriyama Mirai and Exclusive Or (差分+位运算)相关推荐

  1. 2021牛客暑期多校训练营3 I Kuriyama Mirai and Exclusive Or 差分 + 二进制分治

    传送门 文章目录 题意: 思路: 题意: 给你一个数组aaa,让你实现以下两个操作之后输出数组aaa. n≤6e5,ai≤230−1n\le6e5,a_i\le2^{30}-1n≤6e5,ai​≤23 ...

  2. 2021牛客暑期多校训练营9

    2021牛客暑期多校训练营9 题号 题目 知识点 A A Math Challenge B Best Subgraph C Cells D Divide-and-conquer on Tree E E ...

  3. 2021牛客暑期多校训练营5

    2021牛客暑期多校训练营5 题号 题目 知识点 A Away from College B Boxes 概率 C Cheating and Stealing D Double Strings 线性d ...

  4. 2021牛客暑期多校训练营4

    2021牛客暑期多校训练营4 题号 题目 知识点 A Course B Sample Game C LCS D Rebuild Tree E Tree Xor 思维+线段树 F Just a joke ...

  5. 2021牛客暑期多校训练营3

    2021牛客暑期多校训练营3 题号 题目 知识点 A Guess and lies B Black and white C Minimum grid 二分图匹配 D Count E Math 数论+打 ...

  6. 2021牛客暑期多校训练营2

    2021牛客暑期多校训练营2 题号 题目 知识点 A Arithmetic Progression B Cannon C Draw Grids D Er Ba Game E Gas Station F ...

  7. 2021牛客暑期多校训练营1

    2021牛客暑期多校训练营1 题号 题目 知识点 难度 A Alice and Bob 博弈论 B Ball Dropping 计算几何 签到 C Cut the Tree D Determine t ...

  8. 2021牛客暑期多校训练营2,签到题CDFKI

    2021牛客暑期多校训练营2 题号 标题 已通过代码 通过率 团队的状态 A Arithmetic Progression 点击查看 6/72 未通过 B Cannon 点击查看 34/104 未通过 ...

  9. 2021牛客暑期多校训练营1, 签到题DFBG

    2021牛客暑期多校训练营1 题号 标题 已通过代码 通过率 团队的状态 A Alice and Bob 点击查看 1365/5586 通过(博弈论-打表) B Ball Dropping 点击查看 ...

  10. 【训练题66:状压暴力 | 子集dp】Greater Integer, Better LCM | 2021牛客暑期多校训练营5

    题意 Greater Integer, Better LCM | 2021牛客暑期多校训练营5 给你 a,b,ca,b,ca,b,c ,你需要找到一对 x,yx,yx,y ,满足: lcm(a+x,b ...

最新文章

  1. SAP标准成本估算删除
  2. Hadoop中通过ToolRunner和Configured实现直接读取命令行动态出入reduce task数量,jar文件等...
  3. 中国移动携手腾讯开展5G联合创新
  4. vue引入turn.js
  5. 如何阻止SAP CRM订单创建好之后,自动被置为传输状态这一行为
  6. jQuery之call()方法的使用
  7. 淘宝爬取某人的所有购物订单
  8. 深度学习(三):初级卷积神经网络
  9. 加密视频如何破解 如何解除机器码绑定的视频
  10. 全国计算机等级考试二级Web程序设计考试大纲(2018年版)
  11. 键盘模拟文件尾EOF
  12. 点击箭头 切图 html,css写箭头
  13. windows远程桌面不能复制粘贴的解决办法
  14. RK3568J edp屏幕点亮 时序调试总结
  15. No.118 Pascal's Triangle ||
  16. 串口通信协议--UART、RS-232、RS-485、RS-422
  17. KISSY基础篇乄目录
  18. Ubuntu查看usb 设备
  19. 2019年ACM-ICPC关注的一些比赛
  20. FLstudio不能保存文件

热门文章

  1. 美多商城之用户注册(用户模型类)
  2. python日志输出到屏幕,python日志写入文件
  3. 高等数学·为什么f``(x)小于0:则f(x)在[a,b]上的图形是凹的。f``(x)大于0:则f(x)在[a,b]上的图形是凸的。
  4. 图像处理经典图片Lena背后的故事
  5. YOLOv5实现自定义对象训练与OpenVINO部署全解析
  6. Python图像处理介绍--彩色图像的直方图处理
  7. 【OpenCV 4开发详解】轮廓发现与绘制
  8. 本地nginx多域名映射
  9. IntelliJ IDEA详细配置
  10. SQL Server中的命名规范(个人使用)