传送门

毒瘤lxl

本质是莫队,关键是怎么处理询问

这里需要开两个bitset(记为\(b1,b2\)),分别存\(x\)和\(n-x\)是否出现

对于询问1,即\(x-y=z\),由于\(y=x-z\),所以要求\(x\)和\(x-z\)同时存在,相当于\(b1\&(b1<<z)\)是否有1,没有就是不存在这种情况

对于询问2,即\(x+y=z\),这里记\(w=n-y\),原式变为\(x+n-w=z\),即\(x-w=z-n\),和情况1类似,相当于要知道\(b1\&(b2>>(n-z))\)是否有1

询问3的话,\(O(\sqrt{n})\)大力枚举约数,判断是否存在即可

  1. #include<bits/stdc++.h>
  2. #define LL long long
  3. #define il inline
  4. #define re register
  5. using namespace std;
  6. const int N=100000+10;
  7. il int rd()
  8. {
  9. int x=0,w=1;char ch=0;
  10. while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
  11. while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
  12. return x*w;
  13. }
  14. int n,m,q,sz,mm[N],a[N],b[N];
  15. bitset<N> b1,b2;
  16. bool an[N];
  17. struct qu
  18. {
  19. int o,l,r,x,id;
  20. bool operator < (const qu &bb) const {return mm[l]!=mm[bb.l]?mm[l]<mm[bb.l]:mm[r]<mm[bb.r];}
  21. }qq[N];
  22. int main()
  23. {
  24. n=rd(),q=rd();
  25. sz=(int)sqrt(n);
  26. for(int i=1;i<=n;++i) a[i]=rd(),mm[i]=i/sz;
  27. for(int i=1;i<=q;++i) qq[i].o=rd(),qq[i].l=rd(),qq[i].r=rd(),qq[i].x=rd(),qq[i].id=i;
  28. sort(qq+1,qq+q+1);
  29. for(int i=1,l=1,r=0;i<=q;++i)
  30. {
  31. while(r<qq[i].r)
  32. {
  33. ++r;
  34. ++b[a[r]];
  35. if(b[a[r]]==1) b1[a[r]]=b2[n-a[r]]=1;
  36. }
  37. while(r>qq[i].r)
  38. {
  39. --b[a[r]];
  40. if(b[a[r]]==0) b1[a[r]]=b2[n-a[r]]=0;
  41. --r;
  42. }
  43. while(l<qq[i].l)
  44. {
  45. --b[a[l]];
  46. if(b[a[l]]==0) b1[a[l]]=b2[n-a[l]]=0;
  47. ++l;
  48. }
  49. while(l>qq[i].l)
  50. {
  51. --l;
  52. ++b[a[l]];
  53. if(b[a[l]]==1) b1[a[l]]=b2[n-a[l]]=1;
  54. }
  55. int x=qq[i].x;
  56. if(qq[i].o==1) an[qq[i].id]=(b1&(b1<<x)).any();
  57. else if(qq[i].o==2) an[qq[i].id]=(b1&(b2>>(n-x))).any();
  58. else
  59. {
  60. for(int j=1;j*j<=x&&!an[qq[i].id];++j)
  61. if(x%j==0) an[qq[i].id]=(b[j]>0&&b[x/j]>0);
  62. }
  63. }
  64. for(int i=1;i<=q;i++) printf("%s\n",an[i]?"hana":"bi");
  65. return 0;
  66. }

luogu P3674 小清新人渣的本愿的更多相关文章

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

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

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

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

  3. P3674 小清新人渣的本愿

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

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

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

  5. [Luogu 3674]小清新人渣的本愿

    Description 题库链接 给你一个序列 \(A\) ,长度为 \(n\) ,有 \(m\) 次操作,每次询问一个区间是否可以 选出两个数它们的差为 \(x\) : 选出两个数它们的和为 \(x ...

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

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

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

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

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

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

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

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

随机推荐

  1. html5應用緩存

    HTML5使用了應用緩存,就是web應用緩存,使得在離線狀態下可以訪問web'應用. 應用緩存的優點: 離線訪問-可以在無網的狀態下訪問應用 速度-有緩存的應用加載更快 瀏覽器負載-瀏覽器只從服務器加 ...

  2. jquery Ajax get()/post()

    get()/post()是通過http get/post向服務器請求數據的. http get vs post: get:向指定資源獲取數據 post項指定資源提交數據. get是向遠程服務器的獲取數 ...

  3. BZOJ4555 HEOI2016/TJOI2016求和(NTT+斯特林数)

    S(i,j)=Σ(-1)j-k(1/j!)·C(j,k)·ki=Σ(-1)j-k·ki/k!/(j-k)!.原式=ΣΣ(-1)j-k·ki·2j·j!/k!/(j-k)! (i,j=0~n).可以发现 ...

  4. SQL注入方法之:获取列名

    select col_name(object_id('table'),1) from sysobjects where name='table'

  5. Django实现websocket完成实时通讯,聊天室,在线客服等

    一 什么是Websocket WebSocket是一种在单个TCP连接上进行全双工通信的协议 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在WebS ...

  6. [CTSC2018] 假面 | 期望 DP

    题目链接 LOJ 2552 Luogu P4564 考场上这道题我先是写了个70分暴力,然后发现似乎可以NTT,然鹅问题是--我没学过NTT,遂脑补之,脑补出来了,下午出成绩一看,卡成暴力分(70)- ...

  7. BZOJ 193题纪念

  8. 【Code Chef】April Challenge 2019

    Subtree Removal 很显然不可能选择砍掉一对有祖先关系的子树.令$f_i$表示$i$子树的答案,如果$i$不被砍,那就是$a_i + \sum\limits_j f_j$:如果$i$被砍, ...

  9. MySql 主辅-一主多辅

    MySql 主辅-一主多辅mysql tar源码包安装 骤及过程,以供参考 系统是centos6.x .注意:此安装是默认CentOS下已经安装了最新工具包,比如GNU make, GCC, Perl ...

  10. cf757F Team Rocket Rises Again (dijkstra+支配树)

    我也想要皮卡丘 跑一遍dijkstra,可以建出一个最短路DAG(从S到任意点的路径都是最短路),然后可以在上面建支配树 并不会支配树,只能简单口胡一下在DAG上的做法 建出来的支配树中,某点的祖先集 ...