【分块】【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乱搞题
题目大意: 每个人有五门课成绩,初始给定一部分学生的成绩,然后每次询问给出一个学生的成绩,希望知道在给定的一堆学生的成绩比这个学生每门都低或者相等的人数 因为强行要求在线查询,所以题目要求,每次当前给 ...
随机推荐
- JS的prototype和__proto__
一.prototype和__proto__的概念 prototype是函数的一个属性(每个函数都有一 个prototype属性),这个属性是一个指针,指向一个对象.它 是显示修改对象的原型的属性. _ ...
- Python面向对象学习2(面向对象的语法和特性,待更新)
上一个内容我们介绍了面向对象和面向对象场景现在我们来学习下语法和特性 1,面向对象基本语法: # -*- coding:utf-8 -*- # Author: Colin Yao class Dog( ...
- hdu 1395 2^x mod n = 1(暴力题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1395 2^x mod n = 1 Time Limit: 2000/1000 MS (Java/Oth ...
- 在AndroidStudio中导入开源库 或者jar
方法一: 先点击Androidstudio中的Project Structure,如图 图1 到如下界面 图2 然后点击+号 图3 选择Library dependency 图4 输入你要的jar包, ...
- linux 服务简介
Linux服务(Linux services)对于每个应用Linux的用户来说都很重要.关闭不需要的服务,可以让Linux运行的更高效,但并不是所有的Linux服务都可以关闭.今天安装了一次CentO ...
- web服务器和数据库服务器不在一台机器上
把localhost改成数据库所在的IP就行了. $link=mysql_connect( "202.195.246.202 ", "root ", " ...
- Linux汇编教程03:大小比较操作
我们在上一讲中,简单了解了汇编程序大概的样子.接下来我们来了解一下,汇编程序的大小比较操作.所以我们以编写寻找一堆数中的最大值作为学习的载体. 在编写程序之前,先要分析我们的目的,在得出解决方案. 目 ...
- freeradius防止用户异常断开无法重新链接上
freeradius防止用户异常断开无法重新链接上 http://www.cnblogs.com/klobohyz/archive/2012/02/08/2342532.html 编辑default文 ...
- linux运维记
nmap 127.0.0.1 命令查看当前服务器对外有多少端口,用于检查漏洞 vim ctrl+z ,jobs,fg 切换控制应用程序 vim 执行命令 #!sh aa.sh执行命令 运维系统监控开源 ...
- C后端设计开发 - 第4章-武技-常见轮子下三路
正文 第4章-武技-常见轮子下三路 后记 如果有错误, 欢迎指正. 有好的补充, 和疑问欢迎交流, 一块提高. 在此谢谢大家了. Moonlight Shadow 纪念那个我爱的, 被我感动的女孩 ...