D. Mishka and Interesting sum
time limit per test

3.5 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

Little Mishka enjoys programming. Since her birthday has just passed, her friends decided to present her with array of non-negative integersa1, a2, ..., an of n elements!

Mishka loved the array and she instantly decided to determine its beauty value, but she is too little and can't process large arrays. Right because of that she invited you to visit her and asked you to process m queries.

Each query is processed in the following way:

  1. Two integers l and r (1 ≤ l ≤ r ≤ n) are specified — bounds of query segment.
  2. Integers, presented in array segment [l,  r] (in sequence of integers al, al + 1, ..., ar) even number of times, are written down.
  3. XOR-sum of written down integers is calculated, and this value is the answer for a query. Formally, if integers written down in point 2 are x1, x2, ..., xk, then Mishka wants to know the value , where  — operator of exclusive bitwise OR.

Since only the little bears know the definition of array beauty, all you are to do is to answer each of queries presented.

Input

The first line of the input contains single integer n (1 ≤ n ≤ 1 000 000) — the number of elements in the array.

The second line of the input contains n integers a1, a2, ..., an (1 ≤ ai ≤ 109) — array elements.

The third line of the input contains single integer m (1 ≤ m ≤ 1 000 000) — the number of queries.

Each of the next m lines describes corresponding query by a pair of integers l and r (1 ≤ l ≤ r ≤ n) — the bounds of query segment.

Output

Print m non-negative integers — the answers for the queries in the order they appear in the input.

Examples
input
3
3 7 8
1
1 3
output
0
input
7
1 2 1 3 3 2 3
5
4 7
4 5
1 3
1 7
1 5
output
0
3
1
3
2
Note

In the second sample:

There is no integers in the segment of the first query, presented even number of times in the segment — the answer is 0.

In the second query there is only integer 3 is presented even number of times — the answer is 3.

In the third query only integer 1 is written down — the answer is 1.

In the fourth query all array elements are considered. Only 1 and 2 are presented there even number of times. The answer is .

In the fifth query 1 and 3 are written down. The answer is .


简述题意:给你一个长度为n的序列,以及t组询问,每组询问 l~r ,求区间内出现偶数次的数的亦或和。(n,t<=10^5)
首先区间出现奇数次的数的亦或和就是区间亦或和,那么如果我们记录区间亦或和,再亦或 区间内出现过的数字的亦或和(比如 1 3 4 3)就是1^3^4^3=5,5^1^3^4=3,出现偶数次的是3。
所以这就变成了一个无修改的输出区间出现过的数字的亦或和,我们这样考虑,先把询问离线排序,按照右端点排序后,用线段树维护区间亦或和,则比如我一个数字在3,7,8位置都出现过,那我记录他上一次在哪出现,把上一个位置的数字改为0,再在新位置放上这个数,然后线段树query即可。
即if(lst[find(a[i])]) update(lst[find(a[i])] , a[i]); update(i.a[i]); printf("%d\n",query(l,r));

#include <stdio.h>
#include <iostream>
#include <memory.h>
#include <algorithm>
using namespace std; #define getch() getchar()
inline int F() { register int aa , bb , ch;
while(ch = getch() , (ch<''||ch>'') && ch != '-'); ch == '-' ? aa=bb= : (aa=ch-'',bb=);
while(ch = getch() , ch>=''&&ch<='') aa = aa* + ch-''; return bb ? aa : -aa;
} const int Maxn = ;
const int Maxt = ;
struct node {
int l , r , id;
} q[Maxn];
int n , m , s[Maxn] , a[Maxn] , tmp , b[Maxn] , bcnt , ll[Maxt] , rr[Maxt] , tree[Maxt] , lst[Maxn] , ANS[Maxn]; void unique() {
bcnt = ;
for(int i=; i<=n; ++i)
if(b[i] != b[bcnt]) b[++bcnt] = b[i];
} int search(int x) {
int l = , r = bcnt , ans = ;
while(l <= r) {
int mid = (l + r) >> ;
if(b[mid] >= x) r = mid - , ans = mid;
else l = mid + ;
}return ans;
} void Build(int x , int l , int r) {
ll[x] = l; rr[x] = r;
tree[x] = ;
if(l == r) return;
int mid = (l + r) >> ;
Build(x<< , l ,mid);
Build(x<<| , mid+ , r);
} void update(int x , int k , int kk) {
tree[x] ^= kk;
if(ll[x] == rr[x]) return ;
int mid = (ll[x] + rr[x]) >> ;
if(mid >= k) update(x<< , k , kk);
else update(x<<| , k , kk);
tree[x] = tree[x<<] ^ tree[x<<|];
} int query(int x , int l , int r) {
l = max(ll[x] , l) ; r = min(rr[x] , r);
if(l > r) return ;
if(l == ll[x] && r == rr[x]) return tree[x];
return query(x<< , l , r) ^ query(x<<| , l , r);
} inline bool cmp (node a , node b) { return a.r < b.r; } int main() {
n = F();
for(int i=; i<=n; ++i) {
a[i] = b[i] = F();
s[i] = s[i-] ^ a[i];
// printf("s[%d] = %d\n",i , s[i] );
}
Build(,,n);
std::sort(b+,b+n+);
unique();
// for(int i=1; i<=bcnt; ++i) printf("%d ",b[i] ); puts("");
m = F();
for(int i=; i<=m; ++i) {
q[i].l = F();
q[i].r = F();
q[i].id = i;
}
int j = ;
std::sort(q+,q+m+,cmp);
// for(int i=1; i<=m; ++i) { printf("Qid:%d : %d %d\n", q[i].id , q[i].l , q[i].r); }
for(int i=; i<=m; ++i) {
while(j <= q[i].r) {
int tmp = search(a[j]);
// printf("aj = %d tmp = %d\n", a[j] , tmp);
if(lst[tmp]) {
update(,lst[tmp],a[j]);
// printf("lst[%d] = %d\n",tmp , lst[tmp] );
}
update(,j,a[j]);
lst[tmp] = j;
++j;
}
ANS[q[i].id] = query( , q[i].l , q[i].r) ^ s[q[i].r] ^ s[q[i].l-];
// for(int i=1; i<=n; ++i) printf("%d ", query(1,i,i)); puts("");
// printf("QL : %d , Qr : %d , Qans = %d\n" ,q[i].l , q[i].r , ANS[q[i].id]);
}
for(int i=; i<=m; ++i) printf("%d\n", ANS[i]);
return ;
}

codeforces D的更多相关文章

  1. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  2. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  3. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  4. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  5. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  6. CodeForces - 274B Zero Tree

    http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...

  7. CodeForces - 261B Maxim and Restaurant

    http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...

  8. CodeForces - 696B Puzzles

    http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...

  9. CodeForces - 148D Bag of mice

    http://codeforces.com/problemset/problem/148/D 题目大意: 原来袋子里有w只白鼠和b只黑鼠 龙和王妃轮流从袋子里抓老鼠.谁先抓到白色老鼠谁就赢. 王妃每次 ...

  10. CodeForces - 453A Little Pony and Expected Maximum

    http://codeforces.com/problemset/problem/453/A 题目大意: 给定一个m面的筛子,求掷n次后,得到的最大的点数的期望 题解 设f[i]表示掷出 <= ...

随机推荐

  1. jQuery: 图片不完全按比例自动缩小

    有时我们会有这样的需求:让图片显示在固定大小的区域.如果不考虑 IE6 完全可以使用 css 的 max-width 限制宽度自动按比例缩小显示,但是这样有个问题,就是如果按比例缩小后,图片高度不够, ...

  2. CSS3属性box-shadow使用教程

    CSS3的box-shadow属性可以让我们轻松实现图层阴影效果.我们来实战详解一下这个属性. 1. box-shadow属性的浏览器兼容性先来看一个这个属性的浏览器兼容性: Opera: 不知道是从 ...

  3. uniform 中checkbox通过jquery 选中

    你是否曾经为不能修改多选框.单选框.文件选择框的样式而郁闷呢,是否想过控制它们的样式且兼容所有浏览器呢?我现在给你推荐的这个jQuery表单美化插件Uniform就可以解决这些问题. Uniform可 ...

  4. Linux上iptables防火墙的基本应用

    1.安装iptables防火墙 yum install iptables -y 2. 清除已有的iptables规则 iptables -F iptables -X iptables -Z 3.显示i ...

  5. ios 控件

    反序列化 JSONModel 上拉刷新 下拉加载更多 MJRefresh AFNetworking 2.5 Asynchronous image downloader with cache - SDW ...

  6. 用python实现哈希表

    哈哈,这是我第一篇博客园的博客.尝试了一下用python实现的哈希表,首先处理冲突的方法是开放地址法,冲突表达式为Hi=(H(key)+1)mod m,m为表长. #! /usr/bin/env py ...

  7. 查看leapmotion的frame信息

    leapmotion的SDK里有个c#实例,很详细,其中的frame类已经把这些封装的很完善了.可惜是控制台的,运行时很难去找那些动作对应的哪些数据.我今天做的就是把它们在窗体控件里分别显示出来,这样 ...

  8. linux 进程控制笔记

    进程创建 普通函数调用完成后,最多返回(return)一次,但fork/vfork会返回二次,一次返回给父进程,一次返回给子进程 父进程的返回值为子进程的进程ID,子进程的返回值为0 1.pid_t ...

  9. mindmanager 快捷键

    insert or CTRL + Enter: 添加副主题 Enter: 添加同级主题(向下) Shift + Enter: 添加同级主题(向上) CTRL + Shift + Insert: 添加上 ...

  10. Javascript Array.prototype.some()

    当我们使用数组时,查找数组中包含某个特殊的项是非常常见的动作.下面例子是一个简单的实现: 01 planets = [ 02     "mercury", 03     " ...