luogu P3674 小清新人渣的本愿(莫队+bitset)
这题是莫队维护bitset。
然而我并不会bitset以前讲过认为不考就没学
我真的太菜了。
首先维护一个权值的bitset——s。
操作3比较简单,我们可以\(\sqrt{x}\)枚举约数然后判断就行了。
操作1就是求是否存在
\]
移一下项
\]
也就是\(\text{(s<<x)}\)&\(x\neq0\)。
那么操作2该怎么办?
我们先设\(b'=n-b\)因为\(x=a+b\)
\]
然后类比操作1就行了。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<bitset>
using namespace std;
const int N=100101;
int n,m,a[N],block[N],cnt[N];
string ans[N];
struct ques{
int l,r,type,id,x;
}qu[N];
bool cmp(ques a,ques b){
if(block[a.l]==block[b.l])return a.r<b.r;
else return block[a.l]<block[b.l];
}
bitset<N> x,y;
int read(){
int sum=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){sum=sum*10+ch-'0';ch=getchar();}
return sum*f;
}
int main(){
n=read();m=read();
int Block=sqrt(n);
for(int i=1;i<=n;i++)a[i]=read(),block[i]=(i-1)/Block+1;
for(int i=1;i<=m;i++)qu[i].type=read(),qu[i].l=read(),qu[i].r=read(),qu[i].x=read(),qu[i].id=i;
sort(qu+1,qu+1+m,cmp);
int l=1,r=0;
for(int i=1;i<=m;i++){
while(r<qu[i].r){
r++;
cnt[a[r]]++;
if(cnt[a[r]]==1)x[a[r]]=1,y[n-a[r]]=1;
}
while(l>qu[i].l){
l--;
cnt[a[l]]++;
if(cnt[a[l]]==1)x[a[l]]=1,y[n-a[l]]=1;
}
while(r>qu[i].r){
if(cnt[a[r]]==1)x[a[r]]=0,y[n-a[r]]=0;
cnt[a[r]]--;
r--;
}
while(l<qu[i].l){
if(cnt[a[l]]==1)x[a[l]]=0,y[n-a[l]]=0;
cnt[a[l]]--;
l++;
}
if(qu[i].type==1){
if((x&(x<<qu[i].x)).any())ans[qu[i].id]="hana";
else ans[qu[i].id]="bi";
}
else if(qu[i].type==2){
if(qu[i].x-n>=0){
if(((y<<(qu[i].x-n))&x).any())ans[qu[i].id]="hana";
else ans[qu[i].id]="bi";
}
else{
if(((x<<(n-qu[i].x))&y).any())ans[qu[i].id]="hana";
else ans[qu[i].id]="bi";
}
}
else{
for(int j=1;j<=sqrt(qu[i].x);j++)
if(qu[i].x%j==0&&x[j]&&x[qu[i].x/j])ans[qu[i].id]="hana";
if(ans[qu[i].id]!="hana")ans[qu[i].id]="bi";
}
}
for(int i=1;i<=m;i++)cout<<ans[i]<<endl;
return 0;
}
luogu P3674 小清新人渣的本愿(莫队+bitset)的更多相关文章
- P3674 小清新人渣的本愿 莫队+bitset
ennmm...bitset能过系列. 莫队+bitset \(\mathcal{O}(m\sqrt n + \frac{nm}{w})\) 维护一个正向的 bitset <N> mem ...
- 洛谷 P3674 小清新人渣的本愿 [莫队 bitset]
传送门 题意: 给你一个序列a,长度为n,有Q次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ...
- 【题解】Luogu P3674 小清新人渣的本愿
原题传送门 这题还算简单(我记得我刚学oi时就来写这题,然后暴力都爆零了) 看见无修改,那么这题应该是莫队 维护两个bitset,第二个是第一个的反串,bitset内维护每个数字是否出现过 第一种操作 ...
- luogu P3674 小清新人渣的本愿
传送门 毒瘤lxl 本质是莫队,关键是怎么处理询问 这里需要开两个bitset(记为\(b1,b2\)),分别存\(x\)和\(n-x\)是否出现 对于询问1,即\(x-y=z\),由于\(y=x-z ...
- P3674 小清新人渣的本愿
P3674 小清新人渣的本愿 一道妙不可言的题啊,,, 一看就知道是个莫队 考虑求答案 1号操作就是个大bitset,动态维护当前的bitset \(S\),把能取哪些值都搞出来,只要\(S\ and ...
- 洛谷P3674 小清新人渣的本愿(莫队)
传送门 由乃tql…… 然后抄了一波zcy大佬的题解 我们考虑把询问给离线,用莫队做 然后用bitset维护,每一位代表每一个数字是否存在,记为$now1$ 然后再记录一个$now1$的反串$now2 ...
- 洛谷P3674 小清新人渣的本愿
题意:多次询问,区间内是否存在两个数,使得它们的和为x,差为x,积为x. n,m,V <= 100000 解: 毒瘤bitset...... 假如我们有询问区间的一个桶,那么我们就可以做到O(n ...
- 洛谷 P3674 小清新人渣的本愿
想看题目的戳我. 我刚开始觉得这道题目好难. 直到我从Awson大佬那儿了解到有一个叫做bitset的STL,这道题目就很容易被解开了. 想知道这个神奇的bitset的戳我. 这个题目一看就感觉是莫队 ...
- [Luogu 3674]小清新人渣的本愿
Description 题库链接 给你一个序列 \(A\) ,长度为 \(n\) ,有 \(m\) 次操作,每次询问一个区间是否可以 选出两个数它们的差为 \(x\) : 选出两个数它们的和为 \(x ...
随机推荐
- C++的头文件(转)
这几天在写比较困难的一部分,所以也没有时间总结一些东西了,不过昨天翻我的笔记本,发现了一篇还不错的笔记,给大家看看. C/C++头文件一览 C.传统 C++ #include <assert.h ...
- Airtest ——poco
1. Pymysql(No module named ‘cryptography’) pip install cryptography pip install paramiko 把 cryptogr ...
- Mysql ERROR 1067: Invalid default value for 字段
问题: //今天把一个数据库的sql文件导入到另一个数据库出现以下异常: Mysql ERROR 1067: Invalid default value for 字段 //原因是因为之前导出数据里面有 ...
- Vue学习之路第十篇:简单计算器的实现
前面九篇讲解了vue的一些基础知识,正所谓:学以致用,今天我们将用前九篇的基础知识,来模拟实现计算器的简单功能,项目价值不高,纯粹是为了加深掌握所学知识. 学前准备: 需要掌握JavaScript的e ...
- ECharts树图节点过多时取消缩放,调整容器高度自适应内容变化
问题现象 使用ECharts树图,在数据维度大,节点过多时,所看到的内容会重叠交错,无法查看. 原因 在给定ECharts树图容器尺寸后,无论数据多么庞大或者稀少,数据始终会尝试在给定容器内撑满.全部 ...
- 【安装配置Redis】
目录 安装 配置 Redis官网:https://redis.io Redis是完全开源免费的,遵守BSD协议. Redis是一个高性能的key-value数据库. @ *** Redis具有以下特点 ...
- codevs 1803 志愿者招募
1803 志愿者招募 2008年NOI全国竞赛 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 申奥成功后,布布经过不懈努 ...
- MRv2 工作机制 、 公平调度器、MR压缩、边数据
对于节点数超过 4000 的大型集群,前一节描述的 MapReduce 系统开始面临着扩展的瓶颈. 2010 年 Yahoo 的团队开始设计下一代的 MapReduce. (Yet Another R ...
- CURL库的宏定义列表
列表CURL库一共同拥有17个函数 curl_close:关闭CURL会话 curl_copy_handle:复制一个CURL会话句柄,同一时候3复制其全部參数 curl_errno:返回最后一个错误 ...
- 浅析Java抽象类和接口的比較
abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是因为这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和inte ...