小L的占卜
小L的占卜
题目描述
小 X
的妹妹小 L
是一名 XXX 国的占卜师,她平日的工作就是为 X
国进行占卜。
X
国的占卜殿中有一条长度为 NNN 米的走廊,先人在走廊的每一米都放置了一座神龛,第 iii 座神龛能够产生 AiA_iAi 点灵力。相同类型的神龛产生的灵力是相同的,不同类型的神龛产生的灵力是不同的,也就是说,如果两座神龛 iii, jjj 产生的灵力 Ai,AjA_i, A_jAi,Aj 相同,那么神龛 i,ji, ji,j 是相同类型的神龛,否则,神龛 i,ji, ji,j 是不同类型的神龛。
在占卜时,小 L
首先会指定一个区间 [L,R][L, R][L,R],区间 [L,R][L, R][L,R] 中所有出现过的神龛将参与占卜,若一种类型的神龛出现了奇数次,那么在这次占卜中,该类型的神龛呈阴性,否则在这次占卜中,该类型的神龛呈阳性。然后,小 L
会指定阴性或阳性中的一种属性,区间 [L,R][L, R][L,R] 中这种属性的每一类型的神龛都会有恰好一座产生灵力。
接着,代表光明和黑暗的两大祭司将轮流取走一座还有灵力剩余的神龛中的一部分灵力,取走的灵力点数一定要是整数,取走最后一点灵力的祭司将会代表 X
国一年 的命运。光明祭司和黑暗祭司都是十分聪明的人,因此她们始终会采取尽量让自己取走最后一点灵力的策略。 可以看出,这场占卜的本质是一场 NimNimNim 游戏,最终 X
国一年的命运将会和产生灵力的神龛产生的灵力点数的异或和直接相关,因此,小 L
希望你能够帮她计算出这个异或和。
输入格式
第一行一个整数 NumNumNum,表示测试点编号,以便选手方便地获得部分分,你可能不需要用到这则信息,样例中 NumNumNum 的含义为数据范围与某个测试点相同。
接下来一行两个整数 NNN、MMM,表示占卜走廊的长度,以及小 L
进行的占卜次数。
接下来一行 NNN 个整数 AiA_iAi,表示第 iii 座神龛能够产生的灵力点数。
接下来 MMM 行,每行 333 个整数 LLL、RRR、TTT,分别表示一次占卜选中的区间和属性,若 T=0T = 0T=0,则表示选中的是阴性,若 T=1T = 1T=1,则表示选中的是阳性。
输出格式
输出 MMM 行,每行一个整数 AnsAnsAns,表示产生灵力的神龛产生的灵力点数的异或和。
样例
样例输入
2
7 5
1 2 1 3 3 2 3
4 6 0
4 5 1
1 3 1
1 7 0
1 5 1
样例输出
2
3
1
3
2
样例解释
在第一次占卜中,区间 [4,6][4, 6][4,6] 中的神龛分布为 [3,3,2][3, 3, 2][3,3,2],其中呈阴性的神龛类型为2{2}2,它们产生的灵力点数异或和为 222。
在第二次占卜中,区间 [4,5][4, 5][4,5] 中的神龛分布为 [3,3][3, 3][3,3],其中呈阳性的神龛类型为 3{3}3,它们产生的灵力点数异或和为 333。
在第三次占卜中,区间 [1,3][1, 3][1,3] 中的神龛分布为 [1,2,1][1, 2, 1][1,2,1],其中呈阳性的神龛类型为1{1}1,它们产生的灵力点数异或和为 111。
在第四次占卜中,区间 [1,7][1, 7][1,7] 中的神龛分布为 [1,2,1,3,3,2,3][1, 2, 1, 3, 3, 2, 3][1,2,1,3,3,2,3],其中呈阴性的神龛类型为 {3},它们产生的灵力点数异或和为 3。
在第五次占卜中,区间 [1,5][1, 5][1,5] 中的神龛分布为 [1,2,1,3,3][1, 2, 1, 3, 3][1,2,1,3,3],其中呈阳性的神龛类型为 1,3{1,3}1,3,它们产生的灵力点数异或和为 222。
数据范围与提示
对于所有测试数据,保证 1≤L≤R≤N≤106,0≤M≤106,T∈0,1,0≤Ai<2301 ≤ L ≤ R ≤ N ≤ 10^6,0 ≤ M ≤ 106,T ∈ {0, 1},0 ≤ Ai < 2^301≤L≤R≤N≤106,0≤M≤106,T∈0,1,0≤Ai<230。 详细的数据范围见下表。
solution
80pts 莫队
100pts
对于奇数的询问,直接输出异或和就行。
考虑比较麻烦的偶数。
把询问离线,按右端点排序。
对于一个右端点,某个数值v的贡献是一段一段的,即00000vvvvv00000vvvv这样
如果这时候加入一个v,那么上一次的v往前所有有贡献的都会取反,即有变成没,没变成有
由于异或两次等于没有,我们直接区间异或就行。
树状数组可以实现。
效率O(nlog^2)
而树状数组和map的常数都不大,可以过。
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#define maxn 1000006
using namespace std;
int n,m,a[maxn],ax[maxn],ans[maxn];
int tr[maxn];
map<int,int>ls;
struct node{
int l,r,t,id;
}q[maxn];
bool cmp(node a,node b){
return a.r<b.r;
}
void add(int i,int v){
for(;i<=n;i+=i&-i)tr[i]^=v;
}
int ask(int i){
int sum=;
for(;i;i-=i&-i)sum^=tr[i];
return sum;
}
int R(){
int v=;char ch;
while(!isdigit(ch=getchar()));v=ch-;
while(isdigit(ch=getchar()))v=v*+ch-;
return v;
}
int main()
{
n=R();n=R();m=R();
for(int i=;i<=n;i++){
a[i]=R();
ax[i]=ax[i-]^a[i];
}
for(int i=;i<=m;i++){
q[i].id=i;
q[i].l=R();q[i].r=R();q[i].t=R();
}
sort(q+,q+m+,cmp);
int now=;
for(int i=;i<=m;i++){
for(;now<=q[i].r;now++){
int la=ls[a[now]];
add(,a[now]);add(la+,a[now]);
//cout<<la<<' '<<a[now]<<endl;
ls[a[now]]=now;
}
if(q[i].t==) ans[q[i].id]=ax[q[i].r]^ax[q[i].l-];
else ans[q[i].id]=ask(q[i].l);
}
for(int i=;i<=m;i++)printf("%d\n",ans[i]);
return ;
}
小L的占卜的更多相关文章
- 洛谷U4727小L的二叉树[树转序列 LIS]
题目背景 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣. 所以,小L当时卡在了二叉树. 题目描述 在计算机科学中,二叉树是每个结点最多有两个子结点的 ...
- ACM D的小L
D的小L 时间限制:4000 ms | 内存限制:65535 KB 难度:2 描述 一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡匡生气,这时小L给 ...
- nyoj-366-D的小L(求全排列)
D的小L 时间限制:4000 ms | 内存限制:65535 KB 难度:2 描述 一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡匡生气,这时小L给匡匡 ...
- 洛谷U4727 小L 的二叉树
U4727 小L 的二叉树 题目背景 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣. 所以,小L当时卡在了二叉树. 题目描述 在计算机科学中,二叉树 ...
- 【BZOJ4030】[HEOI2015]小L的白日梦
[BZOJ4030][HEOI2015]小L的白日梦 题面 BZOJ 洛谷 题解 要求的是最小的不开心连续段的期望. 然后发现自己就不会做了. 然后就可以来抄题解啦. 首先来猜性质: 第一个,一定是按 ...
- BZOJ 4030: [HEOI2015]小L的白日梦
4030: [HEOI2015]小L的白日梦 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 172 Solved: 39[Submit][Statu ...
- 小L记单词
题目描述 小L最近在努力学习英语,但是对一些词组总是记不住,小L小把这些词组中每一个单词的首字母都记一下,这样形成词组的缩写,通过这种方式小L的学习效率明显提高. 输入 输入有多行,每组测试数据占一行 ...
- 小L的试卷
题目描述 小L期末考试结束,高高兴兴放假回家了,可是那么多试卷,老师还要加班批改,有n份试卷由k个老师批改,n份试卷进行了密封编号,由于试卷上的做题情况和书写的规范程序不一样,批改不同的试卷用时也可能 ...
- 小L的项链切割 (回文串)
题目描述 小T送给了小L了一串项链.为了方便,我们把项链上形态不同钻石用不同的字母表示.这样小L的项链就变成了一个字符串.小L忽然想把这串项链优美地切割一下,她想把它切割成尽量少的回文项链,啊也就是回 ...
随机推荐
- MappingException:class com.zsn.crm.Model.user not found whie looking for property user id
之前好好地运行 什么东西都没动过 再次运行突然报异常*****MappingException:class com.zsn.crm.Model.user not found whie looking ...
- 利用sysbench进行MySQL OLTP基准测试
Preface In order to know clearly about the real performance threshold of database server,we ...
- Docker自学纪实(二)Docker基本操作
安装docker 以CentOS7为例: 安装:yum -y install docker 启动:systemctl start docker 设置开机自启:systemctl enable dock ...
- Apache+Tomcat+jk windows环境下的集群部署
记一次在Windows服务器上搭建apatch+tomcat+jk的集群搭建过程,其中也遇到了很多问题,总结一下. 一.准备工作 1.apache-tomcat-7.0.88 2.Apche http ...
- git push 时 fatal: Unable to create 'D:/phpStudy/WWW/green_tree/.git/index.lock': File exists.解决办法
找到自己的项目,找到.git文件夹,进去把目标文件删除即可 或者使用rm -rf 命令(如果没有那个文件件或者文件,将隐藏文件打开就可以看到了)
- 图解HTTP总结(7)——确保Web安全的HTTPS
HTTP 主要有这些不足, 例举如下. 通信使用明文( 不加密) , 内容可能会被窃听. 不验证通信方的身份, 因此有可能遭遇伪装. 无法证明报文的完整性, 所以有可能已遭篡改 ...
- RepeatMasker使用
RM是library-based,通过相似性比对来识别重复序列,可以屏蔽序列中转座子重复序列和低复杂度序列(默认将其替换成N).使用数据库Dfam和Repbase. The Dfam database ...
- 删除警告的方法 python
import warningswarnings.filterwarnings('ignore')
- 吴恩达DeepLearning 第一课第四周随笔
第四周 4.1深度神经网络符号约定 L=4______(神经网络层数) 4.2 校正矩阵的维数 校正要点:,, dZ,dA,dW,db都与它们被导数(Z,A,W,b)的维数相同 4.3 为什么使用 ...
- Android 本应用数据清除管理器DataCleanManager
1.整体分析 1.1.源代码先给出了,可以直接Copy. /** * 本应用数据清除管理器 */ public class DataCleanManager { /** * * 清除本应用内部缓存(/ ...