我们利用一个长度为 1e5 的 bitset,当数值 c 出现时,将 c 位置赋值为 1,对于题目要求的操作可以转变为

  1. 求 bitset 中存在两个位置相差为 x 的 1
  2. 这个比较难,如下图 bitset 所示,假设 a+b=x,那么 x-b=a,所以将 N-b 向右移 N-x,即为 x-b,判断 x-b 是否等于 a 即可 
  3. 枚举所有的因子,判断因子所在的位置是否都为 1

const int N=1e5+5;int n,m;int i,j,k;int a[N];struct Query{int l,r;int id,bel,tag,x;}q[N];int vis[N],ans[N],block;bitset<N> now,renow;bool cmp(Query a,Query b)
{return a.bel^b.bel?a.l<b.l:a.r<b.r;
}void build()
{block=sqrt(n);int x,y,opt,c;for(int i=1;i<=m;i++){sd(opt); sddd(x,y,c);q[i].l=x,q[i].r=y,q[i].tag=opt,q[i].x=c,q[i].id=i;q[i].bel=q[i].l/block;}sort(q+1,q+1+m,cmp);
}void add(int pos)
{int x=a[pos];if(!vis[x]) now.set(x),renow.set(N-x);vis[x]++;
}void del(int pos)
{int x=a[pos];vis[x]--;if(!vis[x]) now.reset(x),renow.reset(N-x);
}void mo()
{int l=1,r=0;for(int i=1;i<=m;i++){while(l>q[i].l) add(--l);while(r<q[i].r) add(++r);while(l<q[i].l) del(l++);while(r>q[i].r) del(r--);int x=q[i].x;if(q[i].tag==1) ans[q[i].id]=(now&(now>>x)).any();else if(q[i].tag==2) ans[q[i].id]=(now&(renow>>(N-x))).any();else{for(int j=1;j*j<=x && !ans[q[i].id];j++){if(x%j==0 && now[j] && now[x/j]) ans[q[i].id]=1; }}}
}int main()
{while(~sdd(n,m)){for(int i=1;i<=n;i++) sd(a[i]);build();mo();for(int i=1;i<=m;i++) puts(ans[i]?"hana":"bi");}//PAUSE;return 0;
}

洛谷 P3674 小清新人渣的本愿(莫队 +bitset)相关推荐

  1. 洛谷 P3674 小清新人渣的本愿 [莫队 bitset]

    传送门 题意: 给你一个序列a,长度为n,有Q次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ...

  2. P3674 小清新人渣的本愿 (莫队 + bitset)

    题目链接: P3674 小清新人渣的本愿 大致题意 给定一个长度为 n n n的序列, 有 m m m次询问操作. 1 l r x 表示询问 [ l , r ] [l, r] [l,r]是否存在 a ...

  3. 洛谷-小清新人渣的本愿-(莫队+bitset)

    小清新人渣的本愿 题意: 就是给你一个数组,然后有3种查询,分别是问你l到r区间内,是否有两个数的差等于x,只和等于x,乘积为x. 思考: 其实看到,感觉就挺复杂的,没办法去找这种关系对,除了乘积为x ...

  4. 洛谷 P3674 小清新人渣的本愿 bitset+莫队

    题目: https://www.luogu.org/problemnew/show/P3674 题目大意: 给你一个长度为 N N N的序列,每次询问[l,r]能不能取出两个数,和或差或积等于C&qu ...

  5. [洛谷P3674]小清新人渣的本愿

    题目传送门 这道题是一道莫队题.对于每一种问法,就是查询对应的数是否在当前的区间内. 设$b[i]$表示莫队当前区间中有没有$i$这个数. 对于第一问"是否可以选出两个数它们的差为x&quo ...

  6. P3674 小清新人渣的本愿 (bitset+莫队)

    给你一个序列a,长度为n,有m次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ,这三个操作分别 ...

  7. luogu P3674 小清新人渣的本愿

    https://www.luogu.com.cn/problem/P3674 首先肯定是莫队 然后考虑如何判断,发现差可以直接用bitset 加法就整个数反过来(相当于取补集),然后再bitset 乘 ...

  8. 【题解】Luogu P3674 小清新人渣的本愿

    原题传送门 这题还算简单(我记得我刚学oi时就来写这题,然后暴力都爆零了) 看见无修改,那么这题应该是莫队 维护两个bitset,第二个是第一个的反串,bitset内维护每个数字是否出现过 第一种操作 ...

  9. 小清新人渣的本愿(莫队+bitset)

    小清新人渣的本愿 这两天写了些 b i t s e t bitset bitset的题,但都不想写题解...正巧这道题还结合了莫队,也是正在学习的,就记录一下吧. 题意: 给定一个 a a a数组,有 ...

最新文章

  1. S210-设置通过X130-Profinet口进行配置
  2. String类为什么是final
  3. 用Docker构建LNMP环境(上)
  4. python 建站需求_python建站基础环境配置
  5. 别等了,全面「远程办公」凉了
  6. linux mysql phpadmin_Linux系统下安装phpmyadmin方法
  7. matlab monte carlo,Monte Carlo Simulation
  8. 【Ionic】---Using Local Notifications In Your Ionic Framework App
  9. arnold官方帮助文档_Python用不好英语水平不够?这里有官方中文文档你看不看
  10. Axure RP从入门到精通(二十)鼠标指针函数
  11. PS教程新手入门(一)--去除图片上文字的方法(6种)
  12. 使用PHP连接MySQL数据库的代码
  13. 用计算机解决质数猜想,天才数学家又出成果!他解决了困扰数学界80年的猜想,连陶哲轩都夸他厉害!...
  14. python画圣诞帽_用Python就可以给你的头像戴上圣诞帽,别@微信团队了!
  15. .Net Winform 开发笔记(四) 透过现象看本质
  16. (44.1)【APP应用漏洞发现】抓包工具、协议分析、逆向工程
  17. 《Effective Java》读书笔记五(枚举和注解)
  18. 15.在springboot中的事务处理
  19. Python爬虫——新浪微博(网页版)
  20. 神经放射学诊断中的MRI数据分析

热门文章

  1. 那个站在科学与艺术路口撸码绘的女同学(二)
  2. 淘宝/天猫店铺的所有商品 API接口,店铺商品API接口,店铺详情API接口
  3. 炸掉研发“金字塔”,让鸿蒙成为世界的Harmony OS
  4. 计算机组成原理与系统结构期末复习题(1)
  5. 常见的CSS字体样式属性/font-size/font-family/font-weight/font-style/font综合属性/@font-face属性/学习笔记
  6. 企业实战-Kubernetes(十一)Kubernetes监控
  7. NLP领域中的预训练模型杂谈
  8. android 微信登录不回调,Anroid 进阶之旅 | 微信登录没有回调的问题
  9. C++程序员应了解的那些事(116)~单引号 VS 双引号
  10. Zcash Orchard Shielded Protocol