NOJ——1669xor的难题(树状数组的异或求和)
来源:互联网 发布:开个淘宝工作室怎么样 编辑:程序博客网 时间:2024/06/06 21:40
[1669] xor的难题
- 时间限制: 1000 ms 内存限制: 65535 K
- 问题描述
- 最近Alex学长有个问题被困扰了很久,就是有同学给他n个数,然后给你m个查询,然后每个查询给你l和r(左下标和右下标),然后问你每个查询l到r之间数字的xor值。(al ^ ... ^ ar)。
- 输入
- 输入t组数据,下一行输入n (1 <=n <=10^5)和m (1 <=m <= 10^4),第三行输入n个数字ai(0 <=ai <= 10^8),第四行输入m个询问l和r(1 <=l <=r <= n)。
- 输出
- 每个询问输出区间xor值的答案。
- 样例输入
13 20 1 21 23 3
- 样例输出
12
呃呃呃树状数组果然效果出众,从暴力800+ms变成了200+ms,学长深不可测,再感谢下阙神的指导,不然还不知道如何将树状数组扩展成异或形式求和。
主要问题就是这个树状数组如何构建:
首先建立一个一维(二维暂时没做到)的数组,作为树状数组的主体,然后运用add函数进行构建树状数组(每一个端点值附着在上面),然后用另一个getsum函数进行求和Sum[1~index]。当然一个区间和 Sum[L,R]=Sum[r]-Sum[l-1]。至此,一个树状数组普通求和就可以顺利进行了,那么异或求和例如an^an+1^......^am如何求和?通过阙神指导和之前的记忆,先把add和getsum中所有关于val(下标+号千万别动)的加号改为^号,然后最后答案的Sum[r]-Sum[l-1]中减号改为^号。
代码:
#include<iostream>#include<algorithm>#include<cstdlib>#include<sstream>#include<cstring>#include<cstdio>#include<string>#include<deque>#include<cmath>#include<queue>#include<set>#include<map>using namespace std;const int n=100009;int tree[n];void add(int k,int val) { while(k<=n) { tree[k]^=val;//加号改^号 k+=k&-k;//这里是下标的操作,不能动 } } int getsum(int k){ int sum=0; while(k) { sum^=tree[k];//加号改^号 k-=k&-k;/ } return sum; } int main(void){ int i,j,s,m,l,r,t,g; scanf("%d",&t); while(t--) { memset(tree,0,sizeof(tree));scanf("%d%d",&g,&m); for(i=1;i<=g;i++) { scanf("%d",&s); add(i,s);//枝点更新(附着) } for (i=0; i<m; i++) { scanf("%d%d",&l,&r); printf("%d\n",getsum(r)^getsum(l-1));//减号改^号 } } return 0;}
0 0
- NOJ——1669xor的难题(树状数组的异或求和)
- HUST——1106xor的难题之二(异或树状数组单点修改和区间查询)
- 树状数组扩展(异或求和)
- 1019(树状数组的区间更新,区间求和)
- 二维树状数组的求和问题
- 树状数组的区间修改求和
- 水NOJ 嘉娃的难题
- [ACM]博士的难题(异或)
- 树状数组入门(求和)
- 大佬的难题 容斥原理+树状数组
- 树状数组从前往后求和,用来解第k大(或小)的数 poj 2985 The k-th Largest Group
- 树状数组从前往后求和,用来解第k大(或小)的数 poj 2985 The k-th Largest Group
- 关于异或(XOR)的有趣应用
- 异或运算符(xor) 的妙用
- XOR 异或的性质及应用
- 【GDOI2017第三轮模拟day2】树的难题(点剖,树状数组)
- 树状数组区间求和的三种模型
- [树状数组] 区间求和的三种模型
- JZOJ3851. 发奖金(reward)
- 【通信15】JAVA OOP授课计划
- 前端新人学习笔记
- Android Studio中Getting “Cannot reload AVD list:”的Windows&Mac解决方法
- vim配置及插件安装管理(超级详细)
- NOJ——1669xor的难题(树状数组的异或求和)
- 计算几何----判断线段相交(一)
- Elasticsearch - 自动检测及动态映射Dynamic Mapping
- hibernateTemplate不再出现:spring整合报错getFlushMode is not valid without active transaction
- form表单中method的get和post区别
- UVA_10034_Freckles
- Shell文本处理
- bandwagonhost使用
- TCP 三次握手