小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. mybatis中oracle转mysql

    刚来公司实习,遇到的第一个任务就是这个,简单记录一下思路过程.人菜的很,没啥参考价值. 测试时: 将现有的oracle库转为mysql: 用的Navicat自带数据传输功能,简单粗暴 出现的问题: 1 ...

  2. php-5.6.26源代码 - opcode执行

    文件 php-5.6.26/Zend/zend_vm_execute.h ZEND_API void execute_ex(zend_execute_data *execute_data TSRMLS ...

  3. C语言数组篇(四)二维数组

      二维数组声明: ][] ={{,,},{,,}; //两行 三列         二维数组在声明的时候可以不写行,但一定要写列 ] = {{,},{,,},{}}; //未声明的地方自动补零 二维 ...

  4. get请求中url传参中文乱码问题

    在项目中经常会遇到中文传参数,在后台接收到乱码问题.那么在遇到这种情况下我们应该怎么进行处理让我们传到后台接收到的参数不是乱码是我们想要接收的到的,下面就是我的一些认识和理解. 一:get请求url中 ...

  5. WPF系列教程——(二)使用Prism实现MVVM设计模式 - 简书

    原文:WPF系列教程--(二)使用Prism实现MVVM设计模式 - 简书 本文假设你已经知道MVVM设计模式是什么,所以直接进入正题,今天我们就用Prism来实现WPF的MVVM设计模式,百度上关于 ...

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

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

  7. Maven学习 (五) Elipse中发布一个Maven项目到Tomcat

    对于maven初学者的我,经常遇到一个问题就是,maven项目创建成功后,本来已经添加了jar的依赖,但是发布到Tomcat中就是没有jar包存在, 启动Tomcat总是报没有找到jar包,可项目结构 ...

  8. laravel5.5门面

    Facades为应用程序的 服务容器 中可用的类提供了一个 静态接口 . 最直观的好处 就是需记住必须手动注入或配置的长长的类名.因此有人也理解Facades就是一个"快捷别名" ...

  9. +(void)load; +(void)initialize;有什么用处?

    总得来说: 1.+load方法是在main函数之前调用的: 2.遵从先父类后子类,先本类后列类别的顺序调用: 3.类,父类与分类之间的调用是互不影响的.子类中不需要调用super方法,也不会调用父类的 ...

  10. 命名空间“System.Web.Http”中不存在类型或命名空间名称“Description”(是否缺少程序集引用?)

    solution: Set "Copy Local : True" in properties for References\System.Web.Http   在http://s ...