Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum
来源:互联网 发布:天地图图层数据标准 编辑:程序博客网 时间:2024/05/02 21:56
Little Mishka enjoys programming. Since her birthday has just passed, her friends decided to present her with array of non-negative integersa1, a2, ..., an ofn 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 processm queries.
Each query is processed in the following way:
- Two integers l and r (1 ≤ l ≤ r ≤ n) are specified — bounds of query segment.
- Integers, presented in array segment [l, r] (in sequence of integersal, al + 1, ..., ar)even number of times, are written down.
- 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 arex1, 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.
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 integersa1, 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 integersl and r (1 ≤ l ≤ r ≤ n) — the bounds of query segment.
Print m non-negative integers — the answers for the queries in the order they appear in the input.
33 7 811 3
0
71 2 1 3 3 2 354 74 51 31 71 5
03132
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 is0.
In the second query there is only integer 3 is presented even number of times — the answer is3.
In the third query only integer 1 is written down — the answer is1.
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个数,m个询问,每次询问一个区间的所有出现次数为偶数的数的异或和。
分析:我们很容易通过前缀异或和求出每个区间的奇数次数的异或和,然后再通过和这个区间所有不同数的异或和异或就是答案,区间不同数的异或和可以离线做:先按右端把所有询问排序,然后从左到右处理每个前缀,因为右端确定后,我们只需要知道当前每个数最后出现的位置就可以用树状数组求出所有询问。
#include<iostream>#include<string>#include<algorithm>#include<cstdlib>#include<cstdio>#include<set>#include<unordered_map>#include<vector>#include<cstring>#include<stack>#include<cmath>#include<queue>#include <map>#define INF 0x3f3f3f3f#define eps 1e-9#define MAXN 1000005using namespace std;struct thing{int x,y,num;friend bool operator < (thing a,thing b){return a.y < b.y;}} ask[MAXN];int n,m,x,y,a[MAXN],b[MAXN],f[MAXN],ans[MAXN],s[MAXN],pre[MAXN];int lowbit(int x){return x & (-x);}void Insert(int k,int x){while(k <= n){f[k] ^= x;k += lowbit(k);}}int Find(int k){int ans = 0;while(k){ans ^= f[k];k -= lowbit(k);}return ans;}int main(){scanf("%d",&n);for(int i = 1;i <= n;i++) {scanf("%d",&a[i]);s[i] = a[i];b[i] = b[i-1] ^ a[i];}scanf("%d",&m);for(int i = 1;i <= m;i++){scanf("%d%d",&x,&y);ask[i].x = x;ask[i].y = y;ask[i].num = i;}sort(ask+1,ask+1+m);sort(s+1,s+1+n);int pos = 0; for(int i = 1;i <= m;i++){while(pos < ask[i].y){pos++;int num = lower_bound(s+1,s+1+n,a[pos]) - s;if(pre[num]) Insert(pre[num],a[pos]);Insert(pos,a[pos]);pre[num] = pos;}ans[ask[i].num] = Find(pos) ^ Find(ask[i].x-1) ^ b[pos] ^ b[ask[i].x-1];}for(int i = 1;i <= m;i++) printf("%d\n",ans[i]);}
- Codeforces Round #365 (Div. 2)D. Mishka and Interesting sum
- Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum
- Codeforces Round #365 (Div. 2)D - Mishka and Interesting sum
- Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum
- Codeforces Round #365 (Div. 2) [D] Mishka and Interesting sum
- Codeforces Round #365 (Div. 2)D. Mishka and Interesting sum
- Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum(离线树状数组)
- Codeforces Round #365 (Div. 2) Problem D.Mishka and Interesting sum 解题报告
- Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum(离线线段树)
- Codeforces Round #365 (Div. 2) D Mishka and Interesting sum (离线树状数组)
- Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum(树状数组)
- Codeforces Round #365 (Div. 2)-D Mishka and Interesting sum(树状数组)
- Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum(精简的代码)
- Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum 离线操作,树状数组,last[value],异或和
- Codeforces Round #365 (Div. 2) D.Mishka and Interesting sum (树状数组维护异或值) ★ ★
- Codeforces Round #365 (Div. 2) Mishka and Interesting sum 树状数组
- 【Codeforces Round 365 (Div 2)D】【离线询问 树状数组 前驱思想】Mishka and Interesting sum 区间内出现次数偶数的数的异或和
- CodeForces 703D Mishka and Interesting sum
- 解惑
- 手提电脑安装双屏后没有声音输出
- Date与Quartz的cron之间的相互转换
- 单链表删除重复链表
- DyncRTMPLiveClient-Android的解析
- Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum
- 【OpenCV】手势识别
- HDOJ-----2647拓扑排序
- c++ 智能指针用法详解
- 循环添加100个联系人
- Angular 通过注入 $location 获取与修改当前页面URL
- Java在ACM中的一些运用
- DSL与自动化测试 – 用Python实现简单的DSL
- 判断程序执行用户和活动用户是否一致