link
题意:
给定一个序列,两种操作,一种区间异或上一个常量x,第二种是区间异或上常量x+一个从0开始的等差数列。
思路:
第一种操作很好维护,通过差分数组来维护,就类似于加法的差分数组,第二种呢,严格意义上来说就是对于一个数y ^ (x+i),貌似不是很好维护,那么我们考虑异或的性质,如果i当前小于x的lowbit,那么加号和异或是等价的,可以直接变成y ^ x ^ i ,如果这样的话那么就好操作了,我们考虑一段一段的区间,把当前的l,r分为不超过log的区间,每一段区间都是x的lowbit,那么就和第一种操作是等价的了,那么对于一个等差数列怎么维护呢?我们可以通过类似于线段树懒标记的手法打tag,pushdown也是很好的,b[i][j]代表从[i,i+(1<<j))之间是否异或上了从0开始的等差数列,那么pushdown也很好操作。

// Problem: Kuriyama Mirai and Exclusive Or
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/11254/I
// Memory Limit: 131072 MB
// Time Limit: 6000 ms
//
// Powered by CP Editor (https://cpeditor.org)//#pragma GCC target("avx")
//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
//#pragma GCC optimize("Ofast")
// created by myq
#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
#include<unordered_map>
#include<unordered_set>
using namespace std;
typedef long long ll;
#define x first
#define y second
typedef pair<int,int> pii;
const int N = 600010;
const int mod=998244353;
inline int read()
{int res=0;int f=1;char c=getchar();while(c>'9' ||c<'0'){if(c=='-')    f=-1;c=getchar();}while(c>='0'&&c<='9'){res=(res<<3)+(res<<1)+c-'0';c=getchar(); }return res;} int b[N][20];int tag[N];
int main()
{ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n,q;cin>>n>>q;for(int i=1,x;i<=n;i++){  cin>>x;tag[i]^=x;tag[i+1]^=x;}while(q--){int op,l,r,x;cin>>op>>l>>r>>x;if(op==0){tag[l]^=x;tag[r+1]^=x;continue;}else{for(int i=0;i<=19;i++){if((x>>i&1)&&l+(1<<i)-1<=r){b[l][i]^=1;tag[l]^=x;tag[l+(1<<i)]^=x;x+=(1<<i);l+=(1<<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=1;i<=n;i++){for(int j=19;j>=1;j--){if(!b[i][j]) continue;b[i][j-1]^=1;if(i+(1<<j-1)<=n){tag[i+(1<<j-1)]^=(1<<j-1);b[i+(1<<j-1)][j-1]^=1;if(i+(1<<j)<=n)    {tag[i+(1<<j)]^=(1<<j-1);}}}}for(int i=1;i<=n;i++)cout<<(tag[i]^=tag[i-1])<<" ";return 0;}
/**
* In every life we have some trouble
* When you worry you make it double
* Don't worry,be happy.
**/

Kuriyama Mirai and Exclusive Or相关推荐

  1. 2021牛客多校3 - Kuriyama Mirai and Exclusive Or(差分+倍增)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,现在需要执行 mmm 次操作,每次操作分为下列两种类型: 0 l r x:区间 [l,r][l,r][l,r] 内的数都异或上 xxx 1 ...

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

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

  3. 2021牛客暑期多校训练营3 I-Kuriyama Mirai and Exclusive Or(异或+差分)

    I-Kuriyama Mirai and Exclusive Or KeHe题解 diabolusexnihil题解 不过diabolusexnihil大佬的题解有一部分写错了应该是:每次分裂标记bl ...

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

    题意: 两个操作: 1.给区间[l,r][l,r][l,r]之间的数异或xxx 2.给区间[l,r][l,r][l,r]之间异或(x+(l−i))(x+(l-i) )(x+(l−i)) 题解: 我们发 ...

  5. Codeforces Round #248 (Div. 2) B. Kuriyama Mirai's Stones

    题目简单描述就是求数组中[l,r]区间的和 #include <iostream> #include <vector> #include <string> #inc ...

  6. Kuriyama Mirai‘s Stones

    https://codeforces.com/problemset/problem/433/B 思路:第一种操作用前缀和处理一下,第二种操作先排序再用前缀和处理一下 #include<iostr ...

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

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

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

    题号 标题 已通过代码 通过率 团队的状态 A Guess and lies 点击查看 33/437 未通过 B Black and white 点击查看 785/5177 未通过 (最小生成树) C ...

  9. 随心玩玩(三)Mirai框架QQ机器人

    语言是Kotlin,其实什么语言并不重要,会调用API就够了 文章目录 1. 什么是Mirai框架 2. 创建项目 3. Hello Mirai 4. 后续进阶 1. 什么是Mirai框架 mirai ...

最新文章

  1. mfc中加logo以及背景图
  2. css sprint 生成工具 bg2css
  3. IntelliJ IDEA Maven Gradle的配置
  4. 3dsmax导出html,3dsmax导出gltf格式插件
  5. kafka性能优化入门
  6. JAVA入门[14]-Spring MVC AOP
  7. 无根树的计数——prufer序列
  8. java开发季度绩效自评,季度绩效考核英文自我评价
  9. 异常来自 HRESULT:0x80070057 (E_INVALIDARG)
  10. 一周学习荟萃(TED,知识,教育,笑话,鸡汤)
  11. 一个比较牛逼人的博客
  12. 异常:java.lang.ArithmeticException
  13. 最新、最全开心网钓鱼外挂下载_开心网001钓鱼外挂
  14. 各国语言名称英文简写对照表
  15. 新款macbook pro发布了,但为什么不推荐购买
  16. bzip2: Data integrity error when decompressing--apt-get update
  17. 6亿视频号的8种变现模式
  18. 于Mozilla平台的扩展开发
  19. 什么是.NET?什么是.NET Framework?
  20. 控制人力成本量大策略+六种方案

热门文章

  1. 面试了十几家软件测试公司谈谈我最近面试的总结
  2. rs232/485转WiFi串口转换服务器 Modbus RTU转tcp协议
  3. Devexpress控件使用-CheckListBox
  4. 德州芯片TLV840MADL32DBVRQ1具有可调复位时间延迟和手动复位功能的汽车低压监控器
  5. matlab CPU并行计算,加速限制了改组。 GPU(Tesla K40m),MATLAB中的CPU并行计算
  6. winscp 同步_winscp传输文件,winscp传输文件时要先设置这三步
  7. 袁崇焕被凌迟处死悲剧背后的民心、民意
  8. 保险业务与系统——LOMA 290 保险公司运营——第十一讲——客户服务
  9. python循环从0到x_Python3 从零单排0_变量格式化输出流程控制循环
  10. Vue 身份证验证大全