传送门

由乃tql……

然后抄了一波zcy大佬的题解

我们考虑把询问给离线,用莫队做

然后用bitset维护,每一位代表每一个数字是否存在,记为$now1$

然后再记录一个$now1$的反串$now2$(就是每一位代表的是$N-x$),干吗用等下说

1操作的话,因为每一个位置代表一个数字,如果存在$z-y=x$,可以转化为同时存在$z$和$z-x$,那么把$now1$左移$x$位并与$now1$做$\&$运算,看看是否等于$0$,如果不是说明不存在

2操作的话,$now2$中的$y'$代表数字$N-y$,然后求是否存在$z+y=x$,也就是求是否同时满足$now1$中有$z$和$now2$中有$y'$,带进前面的式子里,$N-y'+z=x,z-y'=x-N$,然后就转化成和上面一样了,那么只要把$now2$右移$N-x$位并与$now1$做$\&$运算就行了

3操作的话,我们可以考虑枚举约数(总共是$\sqrt {n}$个,时间足够),然后在$now1$里每一次查询即可

顺带一提,代码里bitset中的any返回是否有1

  1. //minamoto
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<algorithm>
  5. #include<cmath>
  6. #include<bitset>
  7. using namespace std;
  8. #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
  9. char buf[<<],*p1=buf,*p2=buf;
  10. inline int read(){
  11. #define num ch-'0'
  12. char ch;bool flag=;int res;
  13. while(!isdigit(ch=getc()))
  14. (ch=='-')&&(flag=true);
  15. for(res=num;isdigit(ch=getc());res=res*+num);
  16. (flag)&&(res=-res);
  17. #undef num
  18. return res;
  19. }
  20. const int N=;
  21. struct node{
  22. int k,l,r,x,id;
  23. }q[N+];
  24. int m,n,l,r,s;
  25. int a[N+],c[N+],ans[N+],rt[N+];
  26. bitset<N+> now1,now2;
  27. inline int operator <(node x,node y){
  28. return rt[x.l]==rt[y.l]?rt[x.l]&?x.r<y.r:x.r>y.r:rt[x.l]<rt[y.l];
  29. }
  30. inline void init(){
  31. n=read(),m=read(),s=sqrt(n);
  32. for(int i=;i<=n;++i) a[i]=read(),rt[i]=(i-)/s+;
  33. for(int i=;i<=m;++i){
  34. q[i].k=read(),q[i].l=read(),q[i].r=read();
  35. q[i].x=read(),q[i].id=i;
  36. }
  37. sort(q+,q++m);l=,r=;
  38. }
  39. inline void add(int x){if(c[x]++==)now1[x]=,now2[N-x]=;}
  40. inline void del(int x){if(--c[x]==)now1[x]=,now2[N-x]=;}
  41. int main(){
  42. init();
  43. for(int i=;i<=m;++i){
  44. while(l<q[i].l) del(a[l++]);
  45. while(l>q[i].l) add(a[--l]);
  46. while(r>q[i].r) del(a[r--]);
  47. while(r<q[i].r) add(a[++r]);
  48. int k=q[i].k,x=q[i].x;
  49. switch(k){
  50. case :{
  51. if((now1&(now1<<x)).any())
  52. ans[q[i].id]=;
  53. break;
  54. }
  55. case :{
  56. if((now1&(now2>>(N-x))).any())
  57. ans[q[i].id]=;
  58. break;
  59. }
  60. case :{
  61. for(int j=;j*j<=x;++j)
  62. if(!(x%j))
  63. if(now1[j]&&now1[x/j]){
  64. ans[q[i].id]=;break;
  65. }
  66. break;
  67. }
  68. }
  69. }
  70. for(int i=;i<=m;++i)
  71. puts(ans[i]?"hana":"bi");
  72. return ;
  73. }

洛谷P3674 小清新人渣的本愿(莫队)的更多相关文章

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

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

  2. 洛谷P3674 小清新人渣的本愿

    题意:多次询问,区间内是否存在两个数,使得它们的和为x,差为x,积为x. n,m,V <= 100000 解: 毒瘤bitset...... 假如我们有询问区间的一个桶,那么我们就可以做到O(n ...

  3. 洛谷 P3674 小清新人渣的本愿

    想看题目的戳我. 我刚开始觉得这道题目好难. 直到我从Awson大佬那儿了解到有一个叫做bitset的STL,这道题目就很容易被解开了. 想知道这个神奇的bitset的戳我. 这个题目一看就感觉是莫队 ...

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

    ennmm...bitset能过系列. 莫队+bitset \(\mathcal{O}(m\sqrt n + \frac{nm}{w})\) 维护一个正向的 bitset <N> mem ...

  5. P3674 小清新人渣的本愿

    P3674 小清新人渣的本愿 一道妙不可言的题啊,,, 一看就知道是个莫队 考虑求答案 1号操作就是个大bitset,动态维护当前的bitset \(S\),把能取哪些值都搞出来,只要\(S\ and ...

  6. Bzoj2038/洛谷P1494 小Z的袜子(莫队)

    题面 Bzoj 洛谷 题解 考虑莫队算法,首先对询问进行分块(分块大小为\(sqrt(n)\)),对于同一个块内的询问,按照左端点为第一关键字,右端点为第二关键字排序.我们统计这个区间内相同的颜色有多 ...

  7. 洛谷2709 小B的询问(莫队)

    题面 题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R] ...

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

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

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

    传送门 毒瘤lxl 本质是莫队,关键是怎么处理询问 这里需要开两个bitset(记为\(b1,b2\)),分别存\(x\)和\(n-x\)是否出现 对于询问1,即\(x-y=z\),由于\(y=x-z ...

随机推荐

  1. LTE230方案示意图

    普天LTE230产品及解决方案   责任编辑:耿鹏飞 2016.12.26 16:42 来源:通信世界网 LTE230 普天   一.LTE230系统特点 (一)系统背景 随着社会的快速发展,能源危机 ...

  2. POJ 1276 Cash Machine(单调队列优化多重背包)

    Cash Machine Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 38986   Accepted: 14186 De ...

  3. git学习5 ecipse集成git(转载)

    原文地址:http://blog.csdn.net/hhhccckkk/article/details/10458159 有的eclipse已经自带了GIt了,就不用安装了 1: 进行安装Git,和安 ...

  4. 函数指针的应用学习Demo

    学习函数指针的应用 ,简单demo #include "stdafx.h" #include "SubClass.h"; //函数指针 typedef int ...

  5. Solaris10安装配置LDAP(iPlanet Directory Server )

    Solaris10安装光盘自带了iPlanet Directory Server安装包,系统管理员可以利用iPlanet Directory Server在Solaris系统创建一个LDAP Serv ...

  6. 回调函数(callback)经典解答

    著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:常溪玲链接:http://www.zhihu.com/question/19801131/answer/13005983来源: ...

  7. Android CTS

    1.什么是CTS CTS是google制定的兼容性测试包(Compatibility Test Suite),只有通过CTS测试的设备才有可能获得Android的商标和享受Android Market ...

  8. eclipse中创建maven web项目

    本文主要说明将maven web项目转成eclipse支持的web项目. 创建一个maven项目设置打包类型为war则其为web项目 结构如下 将mavenweb项目转成eclipse识别的web项目 ...

  9. 【265】shell文件创建链接

    优点:可以在其他文件夹内运行对应的*.sh文件,例如通过putty会默认进入的文件夹,可以将链接文件放在那里,就可以直接调用了! 方法:很简单 1. 在文件上点击右键>创建链接 2. 可以对下面 ...

  10. Reporting services

    “数据库引擎服务”可以承载报表服务器数据库.Reporting Services 需要SQL Server 2008 数据库引擎的本地或远程实例来承载报表服务器数据库.如果同时安装数据库引擎实例和 R ...