BZOJ5301:[CQOI2018]异或序列(莫队)
Description
Input
Output
Sample Input
1 2 3 1
1 4
1 3
2 3
2 4
4 4
Sample Output
2
1
2
1
Solution
不能再这么颓下去了
昨天打了一天板子感觉现在脑子锈了QAQ……
题意杀了好久……明明子序列应该是不连续的
一看题目这个形式基本莫队没跑了,
然而如果两端加入/减掉一个数,这个数对于区间的影响是靠近它的连续一段
这显然是没法维护的。所以可以维护一个异或前缀和sum
因为a[x] xor a[x+1]……xor a[y-1] xor a[y] 等价于 sum[y] xor sum[x-1]
那么我们就可以用莫队来维护前缀和了。
每次往莫队里加入/删除前缀和的时候只需要考虑有多少个数与当前数异或等于k,开个桶即可。
因为查询区间[x,y]的时候我们需要sum[x-1]~sum[y],所以读入的时候左端点要减一。
Code
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define N (500000+100)
using namespace std; struct node{int x,y,num,id,ans;}ask[N];
int Keg[N],sum[N],n,m,k,x,now; bool cmp1(node a,node b){return a.id==b.id?a.y<b.y:a.id<b.id;}
bool cmp2(node a,node b){return a.num<b.num;} void Ins(int pos){now+=Keg[sum[pos]^k]; Keg[sum[pos]]++;}
void Del(int pos){Keg[sum[pos]]--; now-=Keg[sum[pos]^k];} int main()
{
scanf("%d%d%d",&n,&m,&k);
int unit=sqrt(n);
for (int i=; i<=n; ++i)
scanf("%d",&x),sum[i]=sum[i-]^x;
for (int i=; i<=m; ++i)
{
scanf("%d%d",&ask[i].x,&ask[i].y);
ask[i].x--; ask[i].num=i;
ask[i].id=ask[i].x/unit;
}
sort(ask+,ask+m+,cmp1); int l=,r=;
for (int i=; i<=m; ++i)
{
while (l<ask[i].x) Del(l++);
while (l>ask[i].x) Ins(--l);
while (r<ask[i].y) Ins(++r);
while (r>ask[i].y) Del(r--);
ask[i].ans=now;
} sort(ask+,ask+m+,cmp2);
for (int i=; i<=m; ++i)
printf("%d\n",ask[i].ans);
}
BZOJ5301:[CQOI2018]异或序列(莫队)的更多相关文章
- bzoj 5301 [Cqoi2018]异或序列 莫队
5301: [Cqoi2018]异或序列 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 204 Solved: 155[Submit][Status ...
- bzoj 5301: [Cqoi2018]异或序列 (莫队算法)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=5301 题面; 5301: [Cqoi2018]异或序列 Time Limit: 10 Sec ...
- 洛谷P4462 [CQOI2018]异或序列(莫队)
题意 题目链接 Sol 一开始以为K每次都是给出的想了半天不会做. 然而发现读错题了维护个前缀异或和然后直接莫队搞就行,. #include<bits/stdc++.h> #define ...
- [CQOI2018]异或序列 (莫队,异或前缀和)
题目链接 Solution 有点巧的莫队. 考虑到区间 \([L,R]\) 的异或和也即 \(sum[L-1]~\bigoplus~sum[R]\) ,此处\(sum\)即为异或前缀和. 然后如何考虑 ...
- P4462 [CQOI2018]异或序列 莫队
题意:给定数列 \(a\) 和 \(k\) ,询问区间 \([l,r]\) 中有多少子区间满足异或和为 \(k\). 莫队.我们可以记录前缀异或值 \(a_i\),修改时,贡献为 \(c[a_i\bi ...
- CQOI2018异或序列 [莫队]
莫队板子 用于复习 #include <cstdio> #include <cstdlib> #include <algorithm> #include <c ...
- luogu P4462 [CQOI2018]异或序列 |莫队
题目描述 已知一个长度为n的整数数列a1,a2,...,an,给定查询参数l.r,问在al,al+1,...,ar区间内,有多少子序列满足异或和等于k.也就是说,对于所有的x,y (I ≤ x ≤ ...
- BZOJ5301: [Cqoi2018]异或序列(莫队)
5301: [Cqoi2018]异或序列 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 400 Solved: 291[Submit][Status ...
- [bzoj5301][Cqoi2018]异或序列_莫队
异或序列 bzoj-5301 Cqoi-2018 题目大意:题目链接. 注释:略. 想法: 由于a^a=0这个性质,我们将所有的数变成异或前缀和. 所求就变成了求所有的$l_i\le x<y\l ...
随机推荐
- 问题集录01--java对list列表进行排序
用Collections.sort方法对list排序有两种方法 第一种是list中的对象实现Comparable接口,如下: /** * 根据order对User排序 */ public class ...
- webapi 权限控制解决方案
随着移动互联网的发展,webapi的应用越来越广泛,本文是笔者总结的webapi的认证校验案例,欢迎指出 案例分为两个功能: 1.用户登录,传入账号和密码到api服务器,然后服务器使用FormsAut ...
- CSS之APP开发比较实用的CSS属性
简介:本人刚入前端没多久,在做APP的开发的时候,经常遇到一些奇怪的问题,本人经验少,会使用js来解决css上的问题,但,却不知道其实有些css已经帮我们解决了. 1,white-space: now ...
- spring mvc如何优雅的使用fastjson
1. 在spring mvc中配置fastjson <!-- 设置配置方案 --> <mvc:annotation-driven> <!-- 设置不使用默认的消息转换器 ...
- Spring cloud ReadTimeout 问题解决
今天使用Spring cloud @FeignClient 调用远程服务的时候,出现readTimeout问题,通过找资料解决方式如下 在Spring.properties 配置文件中添加如下属性解决 ...
- 本地存储localStroage的用法及示例
localStorage是HTML5在在客户端存储数据的新方法,存储的数据没有时间限制. localStorage的主要API: localStorage.setItem(key,value); ...
- for 循环的时候 append() 是移动不是复制
使用for 的时候,append() 不是复制,而是移动,只有最后一个元素才真正的append() 到了 解决办法: 1. 使用字符串: 2.使用clone();
- MySQL数据库(3)----设置和使用自定义变量
MySQL支持定义自己的变量.这些变量可以被设置为查询结果,这使我们可以方便地把一些值存储起来供今后查询使用. ; +-----------------+ | @HisName:= name | +- ...
- css 三角形的制作
参考网页: http://www.jb51.net/article/42513.htm 1 .设置宽高为0 2 .设置4条边框 3 .设置边框颜色border-color如下: border-colo ...
- 关于H5的自定义属性data-*
data-* 是H5的新属性,用来让开发者对标签添加自定义属性的. 其读写方式有如下几种: 如果是 data-abc 的格式,则采用正常格式 abc 来读写该属性值 <div id=" ...