CF 671E XOR and Favorite Number (莫队算法)
来源:互联网 发布:python 数据分析包 编辑:程序博客网 时间:2024/06/03 12:18
Bob has a favorite number k andai of lengthn. Now he asks you to answerm queries. Each query is given by a pairli andri and asks you to count the number of pairs of integersi andj, such thatl ≤ i ≤ j ≤ r and the xor of the numbers ai, ai + 1, ..., aj is equal to k.
The first line of the input contains integers n,m andk (1 ≤ n, m ≤ 100 000,0 ≤ k ≤ 1 000 000) — the length of the array, the number of queries and Bob's favorite number respectively.
The second line contains n integersai (0 ≤ ai ≤ 1 000 000) — Bob's array.
Then m lines follow. Thei-th line contains integersli andri (1 ≤ li ≤ ri ≤ n) — the parameters of the i-th query.
Print m lines, answer the queries in the order they appear in the input.
6 2 31 2 1 1 0 31 63 5
70
5 3 11 1 1 1 11 52 41 3
944
In the first sample the suitable pairs of i andj for the first query are: (1,2), (1,4), (1,5), (2,3), (3,6), (5,6), (6,6). Not a single of these pairs is suitable for the second query.
In the second sample xor equals 1 for all subarrays of an odd length.
题意:给你n个数,然后询问m次,每次询问一个区间[l,r],问你在这个区间内有多少子区间,使得子区间内所有值的亦或值为k
分析:
莫队算法:离线处理没有修改的区间查询,当你知道[L,R]的答案后,可以在O(1)的时间内知道[L-1,R],[L+1,R],[L,R-1],[L,R+1]的答案时,就可以使用莫队算法。
用sum[]数组记录前缀亦或值,如果一个区间[l,r]的所有值的亦或值为k,那么sum[r]^sum[l-1]==k,也就是sum[r]^k==sum[l-1]
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define block 320#define maxn 100010#define LL __int64int sum[maxn];int n,m,k;struct node{ int l,r,unit,id; node(){} node(int l,int r,int unit,int id): l(l),r(r),unit(unit),id(id) {} inline bool operator < (const node &x) const { if(unit==x.unit) return r<x.r; return unit<x.unit; }}E[maxn];LL ans[maxn];LL cnt[maxn*20];int l,r;LL res;void add(int x){ res+=cnt[x^k]; cnt[x]++;}void del(int x){ cnt[x]--; res-=cnt[x^k];}int main(){ while(scanf("%d%d%d",&n,&m,&k)!=EOF) { sum[0]=0; for(int i=1;i<=n;i++) { int x; scanf("%d",&x); sum[i]=sum[i-1]^x; } for(int i=1;i<=m;i++) { scanf("%d%d",&l,&r); l--; E[i]=node(l,r,l/block,i); } sort(E+1,E+m+1); memset(cnt,0,sizeof(cnt)); cnt[0]=1; l=0,r=0,res=0; for(int i=1;i<=m;i++) { while(r<E[i].r) { r++; add(sum[r]); } while(r>E[i].r) { del(sum[r]); r--; } while(l<E[i].l) { del(sum[l]); l++; } while(l>E[i].l) { l--; add(sum[l]); } ans[E[i].id]=res; } for(int i=1;i<=m;i++) printf("%I64d\n",ans[i]); } return 0;}
- CF 617E(XOR and Favorite Number-莫队算法)
- CF 671E XOR and Favorite Number (莫队算法)
- 莫队算法(CF #340 (Div. 2) E. XOR and Favorite Number)
- E. XOR and Favorite Number(莫队算法)
- Codeforces617 E . XOR and Favorite Number(莫队算法)
- Codeforces 617E:XOR and Favorite Number 莫队算法
- codeforce 617E XOR and Favorite Number 莫队算法
- cf617 E. XOR and Favorite Number【莫队算法】
- Codeforces 617E XOR and Favorite Number[莫队算法]
- CF-617E-XOR and Favorite Number(莫队)
- Codeforces Round #340 (Div. 2) E. XOR and Favorite Number(莫队算法)
- codeforces 617E XOR and Favorite Number (莫队算法)
- Codeforces Round #340 (Div. 2)E-XOR and Favorite Number(莫队算法)
- Codeforces Round #340 (Div. 2)E-XOR and Favorite Number(莫队算法)★ ★
- Codeforces-617E-XOR and Favorite Number(莫队算法)
- Codeforces Round #340 (Div. 2)E. XOR and Favorite Number(莫队算法)
- Codeforces Round #340 (Div. 2) E XOR and Favorite Number(莫队算法)
- cf XOR and Favorite Number
- 通讯录1
- 常见多媒体文件格式及视音频编解码总结
- 分布式Matlab计算集群建立方法与Demo
- 如何在两台linux服务器之间用RSA键对的方法SSH/SCP不需密码
- Android多线程操作解析
- CF 671E XOR and Favorite Number (莫队算法)
- Laravel 项目重构策略
- nc 常用命令
- CPU卡知识点
- CocoaPods报错:The dependency `AVOSCloud` is not used in any concrete target
- md-navbar ui-router
- 3,从零开始搭建SSHM开发框架(集成Spring MVC)
- HDU 1534 Schedule Problem(差分约束)
- 【数论】hdu5768 Lucky7(中国剩余定理)