【分块】【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乱搞题
题目大意: 每个人有五门课成绩,初始给定一部分学生的成绩,然后每次询问给出一个学生的成绩,希望知道在给定的一堆学生的成绩比这个学生每门都低或者相等的人数 因为强行要求在线查询,所以题目要求,每次当前给 ...
随机推荐
- 大聊Python-----网络编程
什么是Socket? socket本质上就是在2台网络互通的电脑之间,架设一个通道,两台电脑通过这个通道来实现数据的互相传递. 我们知道网络 通信 都 是基于 ip+port 方能定位到目标的具体机器 ...
- handle_level_irq 与handle_edge_irq 的区别【转】
转自:http://blog.csdn.net/xavierxiao/article/details/6087277 版权声明:本文为博主原创文章,未经博主允许不得转载. Linux 里, handl ...
- (八)hope
vi svnserve.conf vi passwdvi authz svnserve -d -r /usr/svnkillall svnserveps -ef | grep svnserve svn ...
- Redis 3.0 编译安装
Redis 3.0 编译安装 http://www.xuchanggang.cn/archives/991.html
- python设计模式之单例模式(二)
上次我们简单了解了一下什么是单例模式,今天我们继续探究.上次的内容点这 python设计模式之单例模式(一) 上次们讨论的是GoF的单例设计模式,该模式是指:一个类有且只有一个对象.通常我们需要的是让 ...
- Linux下通过jstat命令查看jvm的GC情况
jstat命令可以查看堆内存各部分的使用量,以及加载类的数量.命令的格式如下: jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数] 注意!!!:使用的jdk版本是jdk8. ...
- 【C++】C++11的auto和decltype关键字
转自: http://www.linuxidc.com/Linux/2015-02/113568.htm 今天要介绍C++11中两个重要的关键字,即auto和decltype.实际上在C++98中,已 ...
- 关于移动端audio自动播放问题
本人小白全栈一枚,给公司写了一个监控中心,要求严重报警的时候需要触发音频播放,于是就有了以下的折腾. 刚开始一切都很顺利,自然而然的写了以下代码. <audio id="myaudio ...
- C# Merge into的使用详解
Merge是一个非常有用的功能,类似于Mysql里的insert into on duplicate key. Oracle在9i引入了merge命令, 通过这个merge你能够在一个SQL语句中对一 ...
- react-router 页面离开 提示数据变更
以前项目使用 react-router2.0, 业务层面页面离开的时候需要弹出自己的弹出框,根据用户的操作,进行是否可以离开 试了几种方式都存在问题,实现的并不完美,没办法对用户点击浏览器后退支持的很 ...