HUST——1106xor的难题之二(异或树状数组单点修改和区间查询)
1106: xor的难题之二
时间限制: 2 Sec 内存限制: 128 MB
提交: 8 解决: 3
题目描述
上次Alex学长的问题xor难题很简单吧,现在hkhv学长有个问题想问你们。
他现在有n个数,q个操作。操作分两种,操作一是查询下标L到下标R之间的xor值是多少,操作二是将第i个数变为x。
输入
输入T(T <= 100)组数据,每组数据第一行输入n(1 <=n <= 10^4)和q(1 <=q <= 10^4),接下来一行输入n个数字ai(0 <=ai <= 10^9),接下来是q个操作:"1 L R"表示询问L到R之间的xor值(1 <=L <= R <= n),"2 i x"表示将第i个数变为x(1 <=x <= 10^9)。
输出
对于每一组询问,输出对应的答案(输出格式见样例)。
样例输入
1
3 3
1 2 3
1 1 3
2 2 0
1 1 3
样例输出
Case 1:
0
2
本地搞了半天终于搞对了,单点若需要二次修改的话需要另外一个数组D[i]来记录原本正常非树状结构下的值,在修改的时候跟add结合处理一下。
代码:
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<sstream>
#include<cstring>
#include<cstdio>
#include<string>
#include<deque>
#include<stack>
#include<cmath>
#include<queue>
#include<set>
#include<map>
using namespace std;
typedef long long LL;
#define INF 0x3f3f3f3f
#define MM(x) memset(x,0,sizeof(x))
const int N=10010;
int c[N],d[N];
inline void add(int k,int val,int n)
{
while (k<=n)
{
c[k]^=val;
k+=(k&-k);
}
}
inline int getsum(int k)
{
int sum=0;
while (k)
{
sum^=c[k];
k-=(k&-k);
}
return sum;
}
int main(void)
{
int tcase,i,j,ops,x,val,q,n,l,r;
scanf("%d",&tcase);
for (int w=1; w<=tcase; w++)
{
MM(c);
MM(d);
scanf("%d%d",&n,&q);
for (i=1; i<=n; i++)
{
scanf("%d",&d[i]);
add(i,d[i],n);
}
printf("Case %d:\n",w);
for (i=1; i<=q; i++)
{
scanf("%d",&ops);
if(ops==1)
{
scanf("%d%d",&l,&r);
printf("%d\n",getsum(r)^getsum(l-1));
}
else if(ops==2)
{
scanf("%d%d",&x,&val);
add(x, val^d[x],n);
d[x]=val;
}
}
}
return 0;
}
HUST——1106xor的难题之二(异或树状数组单点修改和区间查询)的更多相关文章
- TZOJ 2725 See you~(二维树状数组单点更新区间查询)
描述 Now I am leaving hust acm. In the past two and half years, I learned so many knowledge about Algo ...
- 【bzoj5173】[Jsoi2014]矩形并 扫描线+二维树状数组区间修改区间查询
题目描述 JYY有N个平面坐标系中的矩形.每一个矩形的底边都平行于X轴,侧边平行于Y轴.第i个矩形的左下角坐标为(Xi,Yi),底边长为Ai,侧边长为Bi.现在JYY打算从这N个矩形中,随机选出两个不 ...
- 【bzoj3132】上帝造题的七分钟 二维树状数组区间修改区间查询
题目描述 “第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a,b),右下角为(c,d)的一个矩形区域内的全部数字加上一个值的操作. ...
- HDU - 1166 敌兵布阵 方法一:(线段树+单点修改,区间查询和) 方法二:利用树状数组
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...
- hdu 2642二维树状数组 单点更新区间查询 模板题
二维树状数组 单点更新区间查询 模板 从零开始借鉴http://www.2cto.com/kf/201307/227488.html #include<stdio.h> #include& ...
- 洛谷 P1972 [SDOI2009]HH的项链-二维偏序+树状数组+读入挂(离线处理,思维,直接1~n一边插入一边查询),hahahahahahaha~
P1972 [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...
- POJ2155 Matrix(二维树状数组||区间修改单点查询)
Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the i-th row an ...
- BZOJ 4017 小 Q 的无敌异或 ( 树状数组、区间异或和、区间异或和之和、按位计贡献思想 )
题目链接 题意 : 中文题 分析 : 首先引入两篇写的很好的题解 题解一.题解二 听说这种和异或相关区间求和的问题都尽量按位考虑 首先第一问.按二进制位计贡献的话.那么对于第 k 位而言 其贡献 = ...
- hdu2642二维树状数组单点更新+区间查询
http://acm.hdu.edu.cn/showproblem.php?pid=2642 题目大意:一个星空,二维的.上面有1000*1000的格点,每个格点上有星星在闪烁.一开始时星星全部暗淡着 ...
随机推荐
- 如何处理错误消息Please install the gcc make perl packages
如何处理这行错误消息? Please install the gcc make perl packages from your distribution. 执行命令行:yum install gcc ...
- cesium模型加载-加载fbx格式模型
整体思路: fbx格式→dae格式→gltf格式→cesium加载gltf格式模型 具体方法: 1. fbx格式→dae格式 工具:3dsMax, 3dsMax插件:OpenCOLLADA, 下载地址 ...
- UVALive 4794 Sharing Chocolate(状压,枚举子集)
n的规模可以状压,f[x][y][S]表示x行,y列,S集合的巧克力能否被切割. 预处理出每个状态S对应的面积和sum(S),对于一个合法的状态一定满足x*y=sum(S),实际上只有两个变量是独立的 ...
- 2015 ACM/ICPC Asia Regional Changchun Online Pro 1002 Ponds(拓扑排序+并查集)
Ponds Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Sub ...
- Android(java)学习笔记123:Android MediaPlayer 播放prepareAsync called in state 8解决办法
1. 使用android MediaPlayer播放音频文件时,有时会出现prepareasync called in state 8错误. 以下方法可以避免这个异常出现. 第1种方法: priva ...
- CPP-基础:new int[]跟int()的区别
1. new int[] 是创建一个int型数组,数组大小是在[]中指定,例如: int * p = new int[10]; //p执行一个长度为10的int数组.2. new int()是创建一个 ...
- ubuntu k8s 命令补全
apt install bash-completion // locate bash_completion source /usr/share/bash-completion/bash_complet ...
- Linux连接外网
1.给linux配置ip 进行远程管理 如果网络不同的话需要配置网卡,命令如下: vi /etc/sysconfig/network-scripts/ifcfg-enp0s3 回车 就出现网络的环 ...
- java,根据输入的月和日,计算出是本年的第几天。
package study01; import java.util.Scanner; public class TestDay { /* * 输入2017年的月和日:month=?,day=? 输出输 ...
- console.log与console.dir的区别
今天学习promise的时候看到了console.dir这个方法,感到很好奇,查了以下感觉又长知识了 在Chrome中,控制台对象定义了两个似乎做同样事情的方法: console.log() cons ...