ennmm...bitset能过系列。

莫队+bitset \(\mathcal{O}(m\sqrt n + \frac{nm}{w})\)

维护一个正向的 bitset <N> mem ,再维护一个反向的 bitset <N> mem1,即 mem1[N-x]=mem[x];

对于 \(-\) 直接 mem&mem<<x 就是相差 \(x\) 的两个点 与 一下

对于 \(+\) 直接 mem&mem1<<(N-x) 因为原来 mem[i] 代表 i , mem1[i] 代表 N-i,所以没有位移时对应位置 与 一下就是是否存在两个数加起来 \(= N\)

对于 \(\times\) 暴力枚举约数即可。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cmath>
  5. #include<cstring>
  6. #include<bitset>
  7. #include<vector>
  8. #define R register int
  9. using namespace std;
  10. namespace Luitaryi {
  11. inline int g() { R x=0,f=1;
  12. register char s; while(!isdigit(s=getchar())) f=s=='-'?-1:f;
  13. do x=x*10+(s^48); while(isdigit(s=getchar())); return x*f;
  14. } const int N=100005;
  15. int n,m,B,mx,a[N],c[N],pos[N];
  16. bool ans[N];
  17. struct node { int op,l,r,x,id;
  18. inline bool operator < (const node& that) const
  19. {return pos[l]==pos[that.l]?(pos[l]&1)?r<that.r:r>that.r:l<that.l;}
  20. }q[N];
  21. bitset <N> mem,mem1;
  22. inline void add(int x) {if(++c[x]==1) mem[x]=1,mem1[N-x]=1;}
  23. inline void sub(int x) {if(--c[x]==0) mem[x]=0,mem1[N-x]=0;}
  24. inline bool cadd(int x) {return (mem&(mem1>>N-x)).any();}
  25. inline bool csub(int x) {return (mem&(mem<<x)).any();}
  26. inline bool cmul(int x) {
  27. for(R i=1;i*i<=x;++i) if(x%i==0&&mem[i]&&mem[x/i])
  28. return true; return false;
  29. }
  30. inline void main() {
  31. n=g(),m=g();
  32. for(R i=1;i<=n;++i) a[i]=g(),mx=max(mx,a[i]);
  33. for(R i=1,op,LL,RR,x;i<=m;++i)
  34. op=g(),LL=g(),RR=g(),x=g(),q[i]=(node){op,LL,RR,x,i};
  35. B=sqrt(n); for(R i=1;i<=m;++i) pos[i]=(i-1)/B+1;
  36. sort(q+1,q+m+1);
  37. for(R i=1,l=1,r=0,op,LL,RR,x,id;i<=m;++i) {
  38. op=q[i].op,LL=q[i].l,RR=q[i].r,x=q[i].x,id=q[i].id;
  39. while(l<LL) sub(a[l++]); while(l>LL) add(a[--l]);
  40. while(r<RR) add(a[++r]); while(r>RR) sub(a[r--]);
  41. if(op==1) ans[id]=csub(x);
  42. if(op==2) ans[id]=cadd(x);
  43. if(op==3) ans[id]=cmul(x);
  44. } for(R i=1;i<=m;++i) puts(ans[i]?"hana":"bi");
  45. }
  46. } signed main() {Luitaryi::main(); return 0;}

2019.11.22

P3674 小清新人渣的本愿 莫队+bitset的更多相关文章

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

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

  2. P3674 小清新人渣的本愿

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

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

    传送门 由乃tql…… 然后抄了一波zcy大佬的题解 我们考虑把询问给离线,用莫队做 然后用bitset维护,每一位代表每一个数字是否存在,记为$now1$ 然后再记录一个$now1$的反串$now2 ...

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

    这题是莫队维护bitset. 然而我并不会bitset以前讲过认为不考就没学 我真的太菜了. 首先维护一个权值的bitset--s. 操作3比较简单,我们可以\(\sqrt{x}\)枚举约数然后判断就 ...

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

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

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

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

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

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

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

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

  9. 【洛谷3674】小清新人渣的本愿(莫队,bitset)

    [洛谷3674]小清新人渣的本愿(莫队,bitset) 题面 洛谷,自己去看去,太长了 题解 很显然的莫队. 但是怎么查询那几个询问. 对于询问乘积,显然可以暴力枚举因数(反正加起来也是\(O(n\s ...

随机推荐

  1. DFS解决八皇后问题

    2019-07-29 16:49:15 #include <bits/stdc++.h> using namespace std; ][]; int tot; int check(int ...

  2. 安装 go和beego后的环境变量设置

    简介 之前有几次因为环境变量设置的问题 损失了一些时间,特在此做记录 安装golang 可参考官方Getting Started,但有时候有问题. 解压 tar -C /usr/local -xzf ...

  3. Android--Facebook Login without LoginButton

    1.引入facebook 工程lib,在Manifest中声明com.facebook.LoginActivity,facebook_app_id <activity android:name= ...

  4. SpringBoot项目启动不走内嵌容器

    一.问题 springboot项目java -jar启动不走内嵌容器,如下图,可以看到是直接走系统环境变量里配置的tomcat容器了 二.分析 我的pom.xml文件关键依赖: <depende ...

  5. 解决跟Docker私有仓库登陆,推送,拉取镜像出现的报错

    出现问题:Error response from daemon: Get https://192.168.186.120/v1/users/: dial tcp 192.168.186.120:443 ...

  6. 转:深入浅出Java垃圾回收机制

    原文链接:http://www.importnew.com/1993.html 对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解G ...

  7. OO第4次博客作业

    OO第4次博客作业 一.第4单元设计 第四单元主要围绕UML图的结构进行JAVA代码编写,对JAVA的层次结构进行更多的认识.个人认为编程操作在实质上与上一章的PathContainer有许多的相同之 ...

  8. 单例模式的双重锁为什么要加volatile(转)

    单例模式如下: 需要volatile关键字的原因是,在并发情况下,如果没有volatile关键字,在第5行会出现问题. instance = new TestInstance();可以分解为3行伪代码 ...

  9. ColdFusion 编写WebService 示例

    1.开发 Web Services,编写cfcdemo.cfc组件,代码如下: <cfcomponent style ="document" namespace = &quo ...

  10. 修改ActiveMQ的内存大小

    有时我们需要修改ActiveMQ的内存大小,防止内存溢出! 修改配置文件下-Xmx参数然后重启mq即可: /fs01/apache-activemq-5.15.0/bin/env ACTIVEMQ_O ...