【分块】【bitset】hdu6085 Rikka with Candies
给你数组A和B,A B中的元素大小都不超过5w,且两两不同。
q次询问,每次给你个k,问你有多少对(i,j),满足A(i)%B(j)==k。

如题目所言模拟bitset的过程,实质上是个分块,每块的大小定为63。
一个小技巧是对于最终的那个数组w,分块后记63个w数组,每个数组最前面一块是零散的部分,大小从1~63,这样比较好操作。
最后把63个w里面的每一位的值都异或起来,就是对应的k的答案。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int SZ=63;
typedef unsigned long long ull;
ull blo[805],b[67][805],lss[67];
int T,n,m,q,sum=794,l[805],r[805],num[50005],sz[805];
bool a[50005],c[50005];
int main(){
int x;
scanf("%d",&T);
for(;T;--T){
memset(a,0,sizeof(a));
memset(blo,0,sizeof(blo));
memset(b,0,sizeof(b));
memset(lss,0,sizeof(lss));
memset(l,0,sizeof(l));
memset(r,0,sizeof(r));
memset(num,0,sizeof(num));
memset(sz,0,sizeof(sz));
memset(c,0,sizeof(c));
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=n;++i){
scanf("%d",&x);
a[x]=1;
}
r[0]=-1;
for(int i=1;i<=sum;++i){
l[i]=r[i-1]+1;
r[i]=min(i*SZ-1,50000);
sz[i]=r[i]-l[i]+1;
for(int j=l[i],p=0;j<=r[i];++j,++p){
if(a[j]){
blo[i]|=((ull)1<<p);
}
num[j]=i;
}
}
for(;m;--m){
scanf("%d",&x);
for(int ql=0;ql<=50000;ql+=x){
int qr=min(ql+x-1,50000);
if(num[ql]==num[qr]){
int fls=ql-l[num[ql]];
lss[qr-ql+1]^=((blo[num[ql]]>>fls)&(((ull)1<<(qr-ql+1))-(ull)1));
}
else{
int ls=r[num[ql]]-ql+1;
for(int i=num[ql]+1,j=1;i<num[qr];++i,++j){
b[ls][j]^=blo[i];
}
int rs=qr-l[num[qr]]+1;
lss[ls]^=(blo[num[ql]]>>(sz[num[ql]]-ls));
b[ls][num[qr]-num[ql]]^=(blo[num[qr]]&(((ull)1<<rs)-(ull)1));
}
}
}
for(int i=1;i<=SZ;++i){
for(int j=0;j<i;++j){
c[j]^=((lss[i]>>j)&(ull)1);
}
int now=0,wei;
for(int k=i,p=1;k<=50000;++k,++p,++wei){
if(p%SZ==1){
++now;
wei=0;
}
c[k]^=((b[i][now]>>wei)&((ull)1));
}
}
for(;q;--q){
scanf("%d",&x);
printf("%d\n",c[x]);
}
}
return 0;
}
【分块】【bitset】hdu6085 Rikka with Candies的更多相关文章
- HDU 6085 - Rikka with Candies | 2017 Multi-University Training Contest 5
看了标程的压位,才知道压位也能很容易写- - /* HDU 6085 - Rikka with Candies [ 压位 ] | 2017 Multi-University Training Cont ...
- 2015北京网络赛 J Clarke and puzzle 求五维偏序 分块+bitset
Clarke and puzzle Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/acmicpc20 ...
- hihocoder1236(北京网络赛J):scores 分块+bitset
北京网络赛的题- -.当时没思路,听大神们说是分块+bitset,想了一下发现确实可做,就试了一下,T了好多次终于过了 题意: 初始有n个人,每个人有五种能力值,现在有q个查询,每次查询给五个数代表查 ...
- 种树 by yoyoball [树分块+bitset]
题面 给定一棵树,有点权 每次询问给出一些点对,求这些点对之间的路径的并集上不同权值的个数,以及这些权值的$mex$ 思路 先考虑只有一对点对,只询问不同权值个数的问题:树上莫队模板题 然后加个$me ...
- HDU 6085 Rikka with Candies(bitset)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6085 [题目大意] 给出一个数组a一个数组b,以及询问数组c, 问对于每个c有多少对a%b=c,答 ...
- 2017多校第5场 HDU 6085 Rikka with Candies bitset
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6085 题意:存在两个长度为n,m的数组A,B.有q个询问,每个询问有一个数字k,可以得到Ai%Bj=k ...
- 2017ACM暑期多校联合训练 - Team 5 1001 HDU 6085 Rikka with Candies (模拟)
题目链接 Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, s ...
- hdu 6085 Rikka with Candies (set计数)
Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...
- hihocoder 1236(2015北京网络赛 J题) 分块bitset乱搞题
题目大意: 每个人有五门课成绩,初始给定一部分学生的成绩,然后每次询问给出一个学生的成绩,希望知道在给定的一堆学生的成绩比这个学生每门都低或者相等的人数 因为强行要求在线查询,所以题目要求,每次当前给 ...
随机推荐
- DotNet 学习笔记 Servers
Servers ASP.NET Core ships with two different HTTP servers: •Microsoft.AspNetCore.Server.Kestrel (AK ...
- 解决java在对MySQL插入数据时出现乱码问题
1.在连接数据库的时候请注意, 最使用连接连接数据库的时候,必须在后面追加上编码的设置:useUnicode=true&characterEncoding=UTF-8,如下图所示. 参考连接: ...
- 多表数据转化器MTDC
需求 根据配置文件的映射规则,将一种模型和数据映射成另外一种模型和数据.如图: 其中,a1,b1,c1,d1为表主键,关系:A.a1=B.b1=C.c2=D.d1 解决思路 解析模型配置文件,将每个转 ...
- 使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程
使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程 http://blog.csdn.net/liujiayu2/article/details/5 ...
- c++设计模式系列----builder模式
看了好几处关于builder模式的书和博客,总感觉不是很清楚,感觉不少书上的说的也不是很准确.最后还是看回圣经<设计模式>.看了好久终于感觉明白了一点了. 意图: builder模式提出的 ...
- Django Model笔记
常用数据类型 # https://docs.djangoproject.com/en/1.8/ref/models/fields/#field-types BooleanField:布尔类型true/ ...
- POJ-2778
DNA Sequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12726 Accepted: 4862 Des ...
- 爬虫 requests模块高级用法
一 介绍 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) #注意:requests库发送请求将网页内 ...
- slice切割数组arr=[[0,1],[2,3]]
for (var i = 0; i < 10; i++) { arr.push(i) } function arrSlice(arr, num) { var arr1 = []; for (va ...
- CentOS7.5安装网易云音乐
CentOS7中一直没有一个像样的音乐播放器,网易云音乐与深度科技团队在半年前就启动了“网易云音乐Linux版“, 但是只提供了Ubuntu(14.04&16.04)和deepin15版本,并 ...