I-Kuriyama Mirai and Exclusive Or

KeHe题解
diabolusexnihil题解

不过diabolusexnihil大佬的题解有一部分写错了应该是:每次分裂标记bl,ib_{l,i}bl,i​需要给数组[l+2i−1,l+2i)⊕2i−1[l+2^{i-1},l+2^i)\oplus2^{i-1}[l+2i−1,l+2i)⊕2i−1然后标记分裂成bl,i−1,bl+2i−1,i−1b_{l,i-1},b_{l+2^{i-1},i-1}bl,i−1​,bl+2i−1,i−1​

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
template <class T=int> T rd()
{T res=0;T fg=1;char ch=getchar();while(!isdigit(ch)) {if(ch=='-') fg=-1;ch=getchar();}while( isdigit(ch)) res=(res<<1)+(res<<3)+(ch^48),ch=getchar();return res*fg;
}
int n,q;
const int N=600010;
int a[N],tag[N];
bool b[N][22];
int main()
{n=rd(),q=rd();for(int i=1;i<=n;i++) a[i]=rd();while(q--){int op=rd(),l=rd(),r=rd(),x=rd();if(!op) // 操作一直接差分打标记{tag[l]^=x,tag[r+1]^=x;continue;}// 考虑区间[l,l+2^i) 每次考虑lowbit(x) ^(x+i) -> ^x^ifor(int i=0;i<=19;i++)if((x>>i&1)&&(l+(1<<i)-1)<=r)// 注意右端点{b[l][i]^=1;tag[l]^=(x>>i)<<i; tag[l+(1<<i)]^=(x>>i)<<i;//差分打标记l+=(1<<i);x+=(1<<i);}// 最后一段区间[l,r]// 此时如果l+2^i<r 那么 x>>i&1一定是0 同样 ^(x+i) -> ^x^i效仿上面做法即可for(int i=19;i>=0;i--)if((l+(1<<i)-1)<=r){b[l][i]^=1;tag[l]^=(x>>i)<<i;tag[l+(1<<i)]^=(x>>i)<<i;l+=(1<<i);x+=(1<<i);}}// 标记分裂for(int i=19;i>=1;i--)for(int j=1;j<=n;j++){if(!b[j][i]) continue;b[j][i-1]^=1;// 分裂标记1if(j+(1<<(i-1))<=n){b[j+(1<<(i-1))][i-1]^=1;// 分裂标记2// [l+2^{i-1},l+2^i) 需要打上抑或 2^{i-1}的标记tag[j+(1<<(i-1))]^=(1<<(i-1));if(j+(1<<i)<=n) tag[j+(1<<i)]^=(1<<(i-1));}}for(int i=1;i<=n;i++){tag[i]^=tag[i-1];printf("%d%c",a[i]^tag[i]," \n"[i==n]);}}

一辈子学不会的做法www

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. 房地产还有最后十年机会 抓紧时间转型
  2. 27-----BBS论坛
  3. SAP UI5 Label related stuff and accessibility研究
  4. HMTL label标签
  5. javascript Class-based vs. prototype-based
  6. 升级 python 2.6.6 到 2.7.14 版本(pip工具安装)
  7. CSU 1803 2016(数论)
  8. [对象转原始类型总结] ('' + obj) === `${obj}`? 不一定!
  9. 联想微型计算机电脑黑屏怎么做系统,联想电脑黑屏怎么办 5种方法轻松排除黑屏故障...
  10. c语言与西门子plc通讯,西门子PLC四种核心通讯方式汇总学习
  11. LAN9252/3 EtherCAT module
  12. 机械设备网站建设多少钱
  13. ubuntu18.4 浏览器无法上网
  14. 绘画系统——P5.js
  15. 基于Unity的2D小游戏 SpeedDown 开发笔记(学习bilibili@[M_Studio]的教学视频
  16. u-boot-2012.04.01移植到TQ2440
  17. 奥斯堕落夫斯基娃的炸鸡(埃式筛 + 尺取)
  18. 扫二维码访问网站、网页
  19. 【在linux中搭建网络文件系统NFS的详细教程】
  20. Java 日期转ISO8601标准时间

热门文章

  1. 独占设备的分配与回收_灵魂拷问:Java对象的内存分配过程是如何保证线程安全的?...
  2. apk源码查看工具_如何查看Linux命令工具的源码?
  3. 小学计算机课教学设计,小学信息技术教学设计三篇
  4. java os库_java-Mac OS X上的JNotify?
  5. fcn网络训练代码_另辟蹊径,中科院自动化所等首次用图卷积网络解决语义分割难题...
  6. jbl css-h15,JBL CSS8006BM 天花音箱
  7. cascade down_Cascaded CNN 方法寻找人脸关键点
  8. Leetcode周赛复盘——第 278 场力扣周赛
  9. C++ 学习之旅(16)——虚函数与纯虚函数virtual
  10. [JavaWeb-Bootstrap]Bootstrap概述