T83312 【音乐会】达拉崩吧·上
T83312 【音乐会】达拉崩吧·上
题解
线段树板子题
把原来的 + 变成 ^
但是注意一下懒标记,这里讲一下小技巧

代码
#include<bits/stdc++.h> using namespace std; const int maxn=1e5+;
int n,m,x,y,v,opr;
int a[maxn],add[maxn*];
long long sum[maxn*];
long long ans; inline int read()
{
int ans=;
char last=' ',ch=getchar();
while(ch<''||ch>'') last=ch,ch=getchar();
while(ch>=''&&ch<='') ans=ans*+ch-'',ch=getchar();
if(last=='-') ans=-ans;
return ans;
} void build(int k,int l,int r)
{
if(l==r)
{
sum[k]=a[l]; return ;
}
int mid=(l+r)>>;
build(k<<,l,mid);
build(k<<|,mid+,r);
sum[k]=sum[k<<]^sum[k<<|];
} void Add(int k,int l,int r,int p)
{
add[k]^=p;
sum[k]^=(long long)((r-l+)%)*p; //注意这里的小技巧
} void pushdown(int k,int l,int r,int mid)
{
if(add[k]==) return ;
Add(k<<,l,mid,add[k]);
Add(k<<|,mid+,r,add[k]);
add[k]=;
} void modify(int k,int l,int r,int x,int y,int v)
{
if(x<=l&&r<=y) return Add(k,l,r,v);
int mid=(l+r)>>;
pushdown(k,l,r,mid);
if(x<=mid) modify(k<<,l,mid,x,y,v);
if(mid<y) modify(k<<|,mid+,r,x,y,v);
sum[k]=sum[k<<]^sum[k<<|];
} long long query(int k,int l,int r,int x,int y)
{
if(x<=l&&r<=y) return sum[k];
int mid=(l+r)>>;
long long res=;
pushdown(k,l,r,mid);
if(x<=mid) res^=query(k<<,l,mid,x,y);
if(mid<y) res^=query(k<<|,mid+,r,x,y);
return res;
} int main()
{
n=read();m=read();
for(int i=;i<=n;i++)
a[i]=read(); build(,,n); for(int i=;i<=m;i++)
{
opr=read();x=read();y=read();
if(opr==)
{
v=read();
modify(,,n,x,y,v);
}
if(opr==)
{
ans=query(,,n,x,y);
printf("%ld\n",ans);
}
} return ;
}
强烈安利 water-lift QWQ
T83312 【音乐会】达拉崩吧·上的更多相关文章
- 2019.6.28 校内测试 T4 【音乐会】达拉崩吧·上
考试的一道附加题~ 一看题目描述:把区间[l,r]里每个数异或上x,求区间[l,r]里所有数的异或和,这明显的要用数据结构或RMQ吧. 恩,所以正解就是线段树啦,至于树状数组行与否,不知道~ wate ...
- 达拉草201771010105《面向对象程序设计(java)》第十八周学习总结
达拉草201771010105<面向对象程序设计(java)>第十八周学习总结 实验十八 总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构 ...
- 达拉草201771010105《面向对象程序设计(java)》第十五周学习总结
达拉草201771010105<面向对象程序设计(java)>第十四周学习总结 第一部分:理论知识 JAR文件: 1.Java程序的打包:程序编译完成后,程序员 将.class文件压缩打包 ...
- 达拉草201771010105《面向对象程序设计(java)》第十四周学习总结
达拉草201771010105<面向对象程序设计(java)>第十四周学习总结 第一部分:理论知识 布局管理器: 布局管理器是一组类. 实现java.awt.LayoutManager接口 ...
- 达拉草201771010105《面向对象程序设计(java)》第十二周学习总结
达拉草201771010105<面向对象程序设计(java)>第十二周学习总结 第一部分:理论知识 Java的抽象窗口工具箱(AbstractWindow Toolkit,AWT)包含在j ...
- 达拉草201771010105《面向对象程序设计(java)》第八周学习总结
达拉草201771010105<面向对象程序设计(java)>第八周学习总结 实验六接口的定义与使用 实验时间 2018-10-18 1.实验目的与要求 (1) 掌握接口定义方法: (2) ...
- 达拉草201771010105《面向对象程序设计(java)》第六周学习总结
达拉草201771010105<面向对象程序设计(java)>第六周学习总结 第一部分:理论知识 1.类.超类和子类 类继承的格式: class 新类名extends已有类名一般来说,子类 ...
- 达拉草201771010105《面向对象程序设计(java)》第三周学习总结
达拉草201771010105«面向对象程序设计(java)»第三周学习总结 第一部分:实验部分 1.实验目的与要求 (1)进一步掌握Eclipse集成开发环境下java程序开发基本步骤: (2)熟 ...
- 达拉草201771010105《面向对象程序设计(java)》第二周学习总结
达拉草201771010105<面向对象程序设计(java)>第二周学习总结 一.理论知识学习部分 这一周我们学习的是书上第三章java的基本程序设计结构的内容,在这一章 ...
随机推荐
- 批处理 使用默认浏览器 打开html文件
@echo offfor /f "tokens=3,4" %%a in ('"reg query HKEY_CLASSES_ROOT\http\shell\open\co ...
- NDK: ant 错误 [javah] Exception in thread "main" java.lang.NullPointerException 多种解决办法
1.错误提示内容 2.ant脚本对应的内容 <?xml version="1.0" encoding="UTF-8"?> <!-- ===== ...
- (持续更新中~~~)kafka--消息引擎与分布式流处理平台
kafka概述 kafka是一个分布式的基于发布/订阅模式的消息队列(message queue),一般更愿意称kafka是一款开源的消息引擎系统,只不过消息队列会耳熟一些.kafka主要应用于大数据 ...
- busybox介绍
BusyBox 是一个集成了一百多个最常用linux命令和工具的软件.BusyBox 将许多具有共性的小版本的UNIX工具结合到一个单一的可执行文件.这样的集合可以替代大部分常用工具比如的GNU fi ...
- 火狐插件simple timer 定时打开指定网页
今天我要介绍的是火狐浏览器一款插件:Simple Timer,该插件是火狐一个可以添加计时器和定时提醒功能插件,该插件的主要作用就是当你的设置在某一个时刻提醒时,插件会自动弹出通知,并且自动打开你想要 ...
- 并查集+启发式合并+LCA思想 || 冷战 || BZOJ 4668
题面:bzoj炸了,以后再补发 题解: 并查集,然后对于每个点记录它与父亲节点联通的时刻 tim ,答案显然是 u 到 v 的路径上最大的 tim 值.启发式合并,把 size 小的子树往大的上并,可 ...
- Spring Boot安全设计的配置
Web应用的安全管理,包括两个方面:一是用户身份认证,即用户登录的设计:另一方面是用户的授权,即一个用户在一个应用系统中能够执行哪些操作的权限管理.我这里使用spring-cloud-security ...
- SQLAlchemy中Model.query和session.query(Model)的区别
我们使用Flask 0.11.1,Flask-SQLAlchemy 2.1使用PostgreSQL作为DBMS. 示例使用以下代码更新数据库中的数据: entry = Entry.query.get( ...
- Gym - 101170B British Menu (强连通缩点+dp)
题意:求一个有向图上的最长路(每个强连通分量的点不超过5个) 首先对强连通分量缩点,暴力预处理出len[k][i][j]表示第k个强连通分量里的第i个点和第j个点之间的最长路径,设状态(k,i,f)表 ...
- BZOJ1050 [HAOI2006]旅行comf[并查集判图连通性]
★ Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求 一条路径,使得路径 ...