2021牛客暑期多校训练营3 I-Kuriyama Mirai and Exclusive Or(异或+差分)
I-Kuriyama Mirai and Exclusive Or
#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]);}}
2021牛客暑期多校训练营3 I-Kuriyama Mirai and Exclusive Or(异或+差分)相关推荐
- 2021牛客暑期多校训练营3 I Kuriyama Mirai and Exclusive Or 差分 + 二进制分治
传送门 文章目录 题意: 思路: 题意: 给你一个数组aaa,让你实现以下两个操作之后输出数组aaa. n≤6e5,ai≤230−1n\le6e5,a_i\le2^{30}-1n≤6e5,ai≤23 ...
- 2021牛客暑期多校训练营9
2021牛客暑期多校训练营9 题号 题目 知识点 A A Math Challenge B Best Subgraph C Cells D Divide-and-conquer on Tree E E ...
- 2021牛客暑期多校训练营5
2021牛客暑期多校训练营5 题号 题目 知识点 A Away from College B Boxes 概率 C Cheating and Stealing D Double Strings 线性d ...
- 2021牛客暑期多校训练营4
2021牛客暑期多校训练营4 题号 题目 知识点 A Course B Sample Game C LCS D Rebuild Tree E Tree Xor 思维+线段树 F Just a joke ...
- 2021牛客暑期多校训练营3
2021牛客暑期多校训练营3 题号 题目 知识点 A Guess and lies B Black and white C Minimum grid 二分图匹配 D Count E Math 数论+打 ...
- 2021牛客暑期多校训练营2
2021牛客暑期多校训练营2 题号 题目 知识点 A Arithmetic Progression B Cannon C Draw Grids D Er Ba Game E Gas Station F ...
- 2021牛客暑期多校训练营1
2021牛客暑期多校训练营1 题号 题目 知识点 难度 A Alice and Bob 博弈论 B Ball Dropping 计算几何 签到 C Cut the Tree D Determine t ...
- 2021牛客暑期多校训练营2,签到题CDFKI
2021牛客暑期多校训练营2 题号 标题 已通过代码 通过率 团队的状态 A Arithmetic Progression 点击查看 6/72 未通过 B Cannon 点击查看 34/104 未通过 ...
- 2021牛客暑期多校训练营1, 签到题DFBG
2021牛客暑期多校训练营1 题号 标题 已通过代码 通过率 团队的状态 A Alice and Bob 点击查看 1365/5586 通过(博弈论-打表) B Ball Dropping 点击查看 ...
- 【训练题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 ...
最新文章
- 房地产还有最后十年机会 抓紧时间转型
- 27-----BBS论坛
- SAP UI5 Label related stuff and accessibility研究
- HMTL label标签
- javascript Class-based vs. prototype-based
- 升级 python 2.6.6 到 2.7.14 版本(pip工具安装)
- CSU 1803 2016(数论)
- [对象转原始类型总结] ('' + obj) === `${obj}`? 不一定!
- 联想微型计算机电脑黑屏怎么做系统,联想电脑黑屏怎么办 5种方法轻松排除黑屏故障...
- c语言与西门子plc通讯,西门子PLC四种核心通讯方式汇总学习
- LAN9252/3 EtherCAT module
- 机械设备网站建设多少钱
- ubuntu18.4 浏览器无法上网
- 绘画系统——P5.js
- 基于Unity的2D小游戏 SpeedDown 开发笔记(学习bilibili@[M_Studio]的教学视频
- u-boot-2012.04.01移植到TQ2440
- 奥斯堕落夫斯基娃的炸鸡(埃式筛 + 尺取)
- 扫二维码访问网站、网页
- 【在linux中搭建网络文件系统NFS的详细教程】
- Java 日期转ISO8601标准时间
热门文章
- 独占设备的分配与回收_灵魂拷问:Java对象的内存分配过程是如何保证线程安全的?...
- apk源码查看工具_如何查看Linux命令工具的源码?
- 小学计算机课教学设计,小学信息技术教学设计三篇
- java os库_java-Mac OS X上的JNotify?
- fcn网络训练代码_另辟蹊径,中科院自动化所等首次用图卷积网络解决语义分割难题...
- jbl css-h15,JBL CSS8006BM 天花音箱
- cascade down_Cascaded CNN 方法寻找人脸关键点
- Leetcode周赛复盘——第 278 场力扣周赛
- C++ 学习之旅(16)——虚函数与纯虚函数virtual
- [JavaWeb-Bootstrap]Bootstrap概述