【分块】【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乱搞题
题目大意: 每个人有五门课成绩,初始给定一部分学生的成绩,然后每次询问给出一个学生的成绩,希望知道在给定的一堆学生的成绩比这个学生每门都低或者相等的人数 因为强行要求在线查询,所以题目要求,每次当前给 ...
随机推荐
- 复现VGG19训练自定义图像分类
1.复现VGG训练自定义图像分类,成功了哈哈. 需要代码工程可联系博主qq号,在左边连接可找到. 核心代码: # coding:utf-8 import tensorflow as tf import ...
- 14、char和varchar的区别?
就长度来说: ♣ char的长度是不可变的; ♣ 而varchar的长度是可变的,也就是说,定义一个char[10]和varchar[10],如果存进去的是‘csdn’,那么char所占的长度依然为1 ...
- bzoj 3524 可持久化线段树
我们可以先离散化,然后建立权值的可持久化线段树,记录每个数出现的次数,对于区间询问直接判断左右儿子的cnt是不是大于(r-k+1)/2,然后递归到最后一层要是还是大于就有,否则不存在. 反思:挺简单一 ...
- hdu 1863 畅通工程 (并查集+最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 畅通工程 Time Limit: 1000/1000 MS (Java/Others) M ...
- xgboost/gbdt在调参时为什么树的深度很少就能达到很高的精度?
问题: 用xgboost/gbdt在在调参的时候把树的最大深度调成6就有很高的精度了.但是用DecisionTree/RandomForest的时候需要把树的深度调到15或更高.用RandomFore ...
- Tabular DataStream protocol 协议
Tabular DataStream protocol 协议 Freetds 创建过程 https://wenku.baidu.com/view/2076cbfaaef8941ea76e0576.ht ...
- python并发模块之concurrent.futures(一)
Python3.2开始,标准库为我们提供了concurrent.futures模块,它提供了ThreadPoolExecutor和ProcessPoolExecutor两个类,实现了对threadin ...
- MACBOOK 总是断网怎么办
MACBOOK 连接 wifi 老是断网.焦躁不安 看图,二个方法,第一就搞定,
- jquery - 实例1
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="text2.aspx.cs& ...
- ORACLE导入Excel数据
首先建好一个和Excel表字段对应字段的表,然后 select t.* from 表名 t for update; 点击这个锁子,打开它 粘贴,然后 再提交事务即可