E. XOR and Favorite Number (莫队板子题)
2024-09-08 15:21:42
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
} /********************************************************************/ const int maxn = 1e5+;
int n, m, k;
int a[maxn], belong[maxn];
ll ans[maxn], flag[maxn*]; //注意这里的flag 要大大大大
ll now; struct node{
int l, r;
int id;
}q[maxn]; bool cmp(node x, node y){
if(belong[x.l] == belong[y.l])
return x.r < y.r;
return belong[x.l] < belong[y.l];
} void Update(int x){
now += flag[a[x]^k];
flag[a[x]]++;
} void Delete(int x){
flag[a[x]]--;
now -= flag[a[x]^k];
} int main(){
n = read(); m = read(); k = read();
int sz = ceil(sqrt(n));
for(int i = ;i <= n;i++){
a[i] = read();
belong[i] = (i-)/sz;
}
//前缀异或
for(int i = ;i <= n;i++){
a[i] = a[i-]^a[i];
}
for(int i = ;i <= m;i++){
q[i].l = read(); q[i].r = read();
q[i].id = i;
}
sort(q+, q++m, cmp);
int l = , r = ;
now = ;
flag[] = ;
for(int i = ;i <= m;i++){
int id = q[i].id; //while里面的顺序是不能随意更改的
while(l < q[i].l){
Delete(l-);
l++;
}
while(l > q[i].l){
l--;
Update(l-);
}
while(r < q[i].r){
r++;
Update(r);
}
while(r > q[i].r){
Delete(r);
r--;
}
ans[id] = now;
}
for(int i = ;i <= m;i++){
cout << ans[i] << endl;
}
return ;
}
最新文章
- PacBio三代全长转录组/Iso-Seq技术及案例分析
- HDU--杭电--1195--Open the Lock--深搜--都用双向广搜,弱爆了,看题了没?语文没过关吧?暴力深搜难道我会害羞?
- mysql 分表策略
- Java编程风格与命名规范整理
- 读取xml文件转成List<;T>;对象的两种方法(附源码)
- php 登陆动作详解
- CF#231DIV2:A Good Number
- html超级简单实现点赞(收藏)和取消赞效果
- R语言︱文本挖掘之中文分词包——Rwordseg包(原理、功能、详解)
- gradlew在Travis CI没可执行权限 permission denied
- happens-before规则和指令重排
- PBRT笔记(7)——反射模型
- springMVC--annotation
- Iterables vs. Iterators vs. Generators
- hashCode方法的作用?
- ScheduledExecutorService的使用
- Caffe + Ubuntu 14.04 64bit + CUDA 6.5 配置说明2
- ural 1091. Tmutarakan Exams(容斥)
- ElasticStack系列之十 &; 生产中的问题与解决方案
- centos7 安装docker-ce ,最新版本docker,docker阿里云加速