E. XOR and Favorite Number (莫队板子题)

题目链接

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 inline int read()
 5 {
 6     int x=0,f=1;char ch=getchar();
 7     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
 8     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
 9     return x*f;
10 }
11 
12 /********************************************************************/
13 
14 const int maxn = 1e5+7;
15 int n, m, k;
16 int a[maxn], belong[maxn];
17 ll ans[maxn], flag[maxn*20];    //注意这里的flag 要大大大大
18 ll now;
19 
20 struct node{
21     int l, r;
22     int id;
23 }q[maxn];
24 
25 bool cmp(node x, node y){
26     if(belong[x.l] == belong[y.l])
27         return x.r < y.r;
28     return belong[x.l] < belong[y.l];
29 }
30 
31 void Update(int x){
32     now += flag[a[x]^k];
33     flag[a[x]]++;
34 }
35 
36 void Delete(int x){
37     flag[a[x]]--;
38     now -= flag[a[x]^k];
39 }
40 
41 int main(){
42     n = read(); m = read(); k = read();
43     int sz = ceil(sqrt(n));
44     for(int i = 1;i <= n;i++){
45         a[i] = read();
46         belong[i] = (i-1)/sz;
47     }
48     //前缀异或
49     for(int i = 1;i <= n;i++){
50         a[i] = a[i-1]^a[i];
51     }
52     for(int i = 1;i <= m;i++){
53         q[i].l = read(); q[i].r = read();
54         q[i].id = i;
55     }
56     sort(q+1, q+1+m, cmp);
57     int l = 1, r = 0;
58     now = 0;
59     flag[0] = 1;
60     for(int i = 1;i <= m;i++){
61         int id = q[i].id;
62 
63         //while里面的顺序是不能随意更改的
64         while(l < q[i].l){
65             Delete(l-1);
66             l++;
67         }
68         while(l > q[i].l){
69             l--;
70             Update(l-1);
71         }
72         while(r < q[i].r){
73             r++;
74             Update(r);
75         }
76         while(r > q[i].r){
77             Delete(r);
78             r--;
79         }
80         ans[id] = now;
81     }
82     for(int i = 1;i <= m;i++){
83         cout << ans[i] << endl;
84     }
85     return 0;
86 }

 

posted @ 2018-09-11 10:17  ouyang_wsgwz  阅读(216)  评论(0编辑  收藏  举报