codeforces D
3.5 seconds
256 megabytes
standard input
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:
- 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 integers al, 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 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.
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.
Print m non-negative integers — the answers for the queries in the order they appear in the input.
3
3 7 8
1
1 3
0
7
1 2 1 3 3 2 3
5
4 7
4 5
1 3
1 7
1 5
0
3
1
3
2
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 .
#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的更多相关文章
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
- 【Codeforces 738A】Interview with Oleg
http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...
- CodeForces - 662A Gambling Nim
http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...
- CodeForces - 274B Zero Tree
http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...
- CodeForces - 261B Maxim and Restaurant
http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...
- CodeForces - 696B Puzzles
http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...
- CodeForces - 148D Bag of mice
http://codeforces.com/problemset/problem/148/D 题目大意: 原来袋子里有w只白鼠和b只黑鼠 龙和王妃轮流从袋子里抓老鼠.谁先抓到白色老鼠谁就赢. 王妃每次 ...
- CodeForces - 453A Little Pony and Expected Maximum
http://codeforces.com/problemset/problem/453/A 题目大意: 给定一个m面的筛子,求掷n次后,得到的最大的点数的期望 题解 设f[i]表示掷出 <= ...
随机推荐
- SharedPreferences的基本用法
获取SharedPreferences的两种方式: 1 调用Context对象的getSharedPreferences()方法 2 调用Activity对象的getPreferences()方法 两 ...
- hadoop数据流转过程分析
hadoop:数据流转图(基于hadoop 0.18.3):通过一个最简单的例子来说明hadoop中的数据流转. hadoop:数据流转图(基于hadoop 0.18.3): 这里使用一个例子说明ha ...
- PHP+AJAX无刷新返回天气预报
AjaxJavaScript天气预报php天气预报,用php来写一个天气预报的模块. 天气数据是通过采集中国气象网站的.本来中国天气网站也给出了数据的API接口.以下是API的地址.返回的数据格式为j ...
- jQuery实现用户注册的表单验证
用户注册的表单往往是需要进行验证的,否则会有一些不否合规则的数据入库,后果会不堪设想,本文通过jquery来实现. <html> <head> <meta chars ...
- Android的Handler与Activity线程同步
假设这里有同一个Runnable对象r. 可能采用的方法有: 第一种: handler.post(r); 实际上这种方法并没有调用线程someThread的start方法,而是直接调用了Runaabl ...
- C#不同页面之间通信的方法
以前做项目的时候经常头疼两个页面之间的交互(汗),这几天看的MVVM项目,忽然感觉好简单的!我自己写了个简单的demo 可以简单实现2个页面之间的交互,新人第一次发博客,不喜勿喷 代码很简单,注释我就 ...
- Oracle中的IF...THEN...ELSE判断
if...then...else是最常见的一种判断语句,他可以实现判断两种情况. 标准语法如下: if <condition_expression> then plsql_sentence ...
- SQL2012 附加数据库提示5120错误解决方法
在win8.1 x64系统上使用sql2012进行附加数据库(包括在x86系统正在使用的数据库文件,直接拷贝附加在X64系统中)时,提示无法打开文件,5120错误. 这个错误是因为没有操作权限,所以附 ...
- Eclipse常用功能
功能(Functions):内置运行java程序的插件(JDT:java develop tools)工作集(WorkSet)(Task list)计划任务管理器(Mylyn)系统配置(Prefere ...
- C++中的多重继承与虚继承的问题
1.C++支持多重继承,但是一般情况下,建议使用单一继承. 类D继承自B类和C类,而B类和C类都继承自类A,因此出现下图所示情况: A A \ / B C ...