小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代码实现

    HTML代码实现: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  2. zabbix服务端安装配置

    1.安装好httpd,mysql,php yum install httpd php mysql mysql-devel php-xmlwriter php-gd php-mbstring php-b ...

  3. JAVA / MySql 编程——第八章 DAO 模式

    1.        数据持久化:将程序中的数据在瞬时状态和持久状态间转换的机制即为数据持久化: 2.        持久化的实现方式:数据库.普通文件.XML文件: 3.        JDBC封装: ...

  4. select值改变

    改变select的值,然后执行一个方法.可以用chang: $("#select").change(function(){ //要执行的内容 });

  5. scrapy--dytt(电影天堂)

    喜欢看电影的小伙伴,如果想看新的电影,然后没去看电影院看,没有正确的获得好的方法,大家就可以在电影天堂里进行下载.这里给大家提供一种思路. 1.dytt.py # -*- coding: utf-8 ...

  6. python学习之路1(基本语法元素)

    1.变量与简单数据类型 1.1变量 变量就是给你所写代码的信息起一个名字,用来存储此信息,使信息变得更加的简洁易读, 例如:message = "Hello World!",其中m ...

  7. strak组件(10):批量操作

    效果图: 批量删除只是一个例子,可以根据需求定制自己想要的批量操作. 新增函数 def get_action_list(self) 钩子方法,获取要处理的批量操作的函数 def action_mult ...

  8. 【异常】The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone.

    异常错误:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone ...

  9. GDOI--DAY2 游记

    今天,熬夜不够多,果然,不出所料,爆零了... 第一题,看到数据之大,懵逼了,于是,敲了个二分SPFA,但是!最大的点GG了,呜呜~~~~(>_<)~~~~ ,于是,就不继续做第一题了(虽 ...

  10. 基于原版Hadoop的YDB部署(转)

    YDB依赖环境准备 一.硬件环境 硬件如何搭配,能做到比较高的性价比,不存在短板.合理的硬件搭配,对系统的稳定性也很关键. 1.CPU不是核数越高越好,性价比才是关键. 经常遇到很多的企业级客户,他们 ...