小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的占卜的更多相关文章

  1. 洛谷U4727小L的二叉树[树转序列 LIS]

    题目背景 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣. 所以,小L当时卡在了二叉树. 题目描述 在计算机科学中,二叉树是每个结点最多有两个子结点的 ...

  2. ACM D的小L

    D的小L 时间限制:4000 ms  |  内存限制:65535 KB 难度:2   描述       一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡匡生气,这时小L给 ...

  3. nyoj-366-D的小L(求全排列)

    D的小L 时间限制:4000 ms  |  内存限制:65535 KB 难度:2 描述       一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡匡生气,这时小L给匡匡 ...

  4. 洛谷U4727 小L 的二叉树

    U4727 小L 的二叉树 题目背景 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣. 所以,小L当时卡在了二叉树. 题目描述 在计算机科学中,二叉树 ...

  5. 【BZOJ4030】[HEOI2015]小L的白日梦

    [BZOJ4030][HEOI2015]小L的白日梦 题面 BZOJ 洛谷 题解 要求的是最小的不开心连续段的期望. 然后发现自己就不会做了. 然后就可以来抄题解啦. 首先来猜性质: 第一个,一定是按 ...

  6. BZOJ 4030: [HEOI2015]小L的白日梦

    4030: [HEOI2015]小L的白日梦 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 172  Solved: 39[Submit][Statu ...

  7. 小L记单词

    题目描述 小L最近在努力学习英语,但是对一些词组总是记不住,小L小把这些词组中每一个单词的首字母都记一下,这样形成词组的缩写,通过这种方式小L的学习效率明显提高. 输入 输入有多行,每组测试数据占一行 ...

  8. 小L的试卷

    题目描述 小L期末考试结束,高高兴兴放假回家了,可是那么多试卷,老师还要加班批改,有n份试卷由k个老师批改,n份试卷进行了密封编号,由于试卷上的做题情况和书写的规范程序不一样,批改不同的试卷用时也可能 ...

  9. 小L的项链切割 (回文串)

    题目描述 小T送给了小L了一串项链.为了方便,我们把项链上形态不同钻石用不同的字母表示.这样小L的项链就变成了一个字符串.小L忽然想把这串项链优美地切割一下,她想把它切割成尽量少的回文项链,啊也就是回 ...

随机推荐

  1. js将人民币数字转大写

    function numberToUpper(money) { var cnNums = new Array("零", "壹", "贰", ...

  2. BAT及各大互联网公司2014前端笔试面试题

    很多面试题是我自己面试BAT亲身经历碰到的.整理分享出来希望更多的前端er共同进步吧,不仅适用于求职者,对于巩固复习前端基础更是大有裨益. 而更多的题目是我一路以来收集的,也有往年的,答案不确保一定正 ...

  3. 在程序开发中,++i 与 i++的区别

    在不参与运算的情况下,i++和++i都是在变量的基础加1 ◆在参与运算的情况下 Var i=123; Var j=i++;  先将i的值123赋值给j,之后再自增 j的值为123  i 的值为124 ...

  4. 用ajax获取淘宝关键字接口

    可定需要查看淘宝界面的结构,按F12查看网页,此时先清除一下网页中的数据,让Network制空,随后在输入框中输入新的内容,比如钱包,数据中会出现新的数据.点击及查看蓝色方框中的内容 点击之后,你可以 ...

  5. MYSQL SQL高级查询技巧

    1.UNION,EXCEPT,INTERSECT运算符 A,UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表. ...

  6. 9.2python操作redis

    Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...

  7. 关于 JS 模块化的最佳实践总结

    模块化开发是 JS 项目开发中的必备技能,它如同面向对象.设计模式一样,可以兼顾提升软件项目的可维护性和开发效率. 模块之间通常以全局对象维系通讯.在小游戏中,GameGlobal 是全局对象.在小程 ...

  8. html---Web Storage存储

    在HTML5中,除了Canvas元素之外,另一个新增的非常重要的功能是可以在客户端本地保存数据的Web Storage功能,之前可以使用Cookies在客户端保存如用户名等简单用户信息,但通过长期使用 ...

  9. Spring---资源访问工具类

    JDK所提供的访问资源的类并不能很好的满足各种底层资源的访问需求,因此,Spring设计了一个Resource接口,它为应用提供了更强大的访问底层资源的能力 主要方法 boolean exists() ...

  10. P1418 选点问题(黑白染色)

    P1418 选点问题 题目描述 给出n个点,m条边,每个点能控制与其相连的所有的边,要求选出一些点,使得这些点能控制所有的边,并且点数最少.同时,任意一条边不能被两个点控制 输入输出格式 输入格式: ...