原题传送门

这题还算简单(我记得我刚学oi时就来写这题,然后暴力都爆零了)

看见无修改,那么这题应该是莫队

维护两个bitset,第二个是第一个的反串,bitset内维护每个数字是否出现过

第一种操作:

要求y-z=x,所以y=z+x

最后判断有没有k和k-x都出现在bitset中的情况

第二种操作:

和第一种类似的方法,就不再讲了qwqwq

第三种操作:

暴力把x分解成两个数的乘积,判断这两个数是否出现过

因为莫队是\(O(n \sqrt n)\)的,查询\(O(\frac{mN}{\omega})\)

  1. #include <bits/stdc++.h>
  2. #define N 100005
  3. #define getchar nc
  4. using namespace std;
  5. inline char nc(){
  6. static char buf[100000],*p1=buf,*p2=buf;
  7. return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
  8. }
  9. inline int read()
  10. {
  11. register int x=0,f=1;register char ch=getchar();
  12. while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
  13. while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
  14. return x*f;
  15. }
  16. inline void write(register int x)
  17. {
  18. if(!x)putchar('0');if(x<0)x=-x,putchar('-');
  19. static int sta[20];register int tot=0;
  20. while(x)sta[tot++]=x%10,x/=10;
  21. while(tot)putchar(sta[--tot]+48);
  22. }
  23. struct query{
  24. int k,l,r,x,id,bl;
  25. }q[N];
  26. inline bool cmp(register query a,register query b)
  27. {
  28. return a.bl!=b.bl?a.l<b.l:((a.bl&1)?a.r<b.r:a.r>b.r);
  29. }
  30. int n,m,blocksize=0,v[N],sum[N],ans[N];
  31. bitset <N> dl1,dl2;
  32. inline void add(register int x)
  33. {
  34. if(++sum[v[x]]==1)
  35. dl1[v[x]]=1,dl2[N-v[x]]=1;
  36. }
  37. inline void del(register int x)
  38. {
  39. if(--sum[v[x]]==0)
  40. dl1[v[x]]=0,dl2[N-v[x]]=0;
  41. }
  42. int main()
  43. {
  44. n=read(),m=read();
  45. blocksize=sqrt(n);
  46. for(register int i=1;i<=n;++i)
  47. v[i]=read();
  48. for(register int i=1;i<=m;++i)
  49. q[i].k=read(),q[i].l=read(),q[i].r=read(),q[i].x=read(),q[i].id=i,q[i].bl=(q[i].l-1)/blocksize+1;
  50. sort(q+1,q+1+m,cmp);
  51. int l=1,r=0;
  52. dl1.reset(),dl2.reset();
  53. for(register int i=1;i<=m;++i)
  54. {
  55. int ll=q[i].l,rr=q[i].r;
  56. while(l>ll)
  57. add(--l);
  58. while(r<rr)
  59. add(++r);
  60. while(l<ll)
  61. del(l++);
  62. while(r>rr)
  63. del(r--);
  64. int k=q[i].k,x=q[i].x,id=q[i].id;
  65. if(k==1)
  66. {
  67. if((dl1&(dl1<<x)).any())
  68. ans[id]=1;
  69. }
  70. else if(k==2)
  71. {
  72. if((dl1&(dl2>>(N-x))).any())
  73. ans[id]=1;
  74. }
  75. else
  76. {
  77. for(register int j=1;j*j<=x;++j)
  78. if(!(x%j))
  79. if(dl1[j]&&dl1[x/j])
  80. {
  81. ans[id]=1;
  82. break;
  83. }
  84. }
  85. }
  86. for(register int i=1;i<=m;++i)
  87. puts(ans[i]?"hana":"bi");
  88. return 0;
  89. }

【题解】Luogu P3674 小清新人渣的本愿的更多相关文章

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

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

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

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

  3. P3674 小清新人渣的本愿

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. js表单提交到后台对象接收

    $.extend({ StandardPost:function(url,args){ var form = $("<form method='post' target='_blank ...

  2. Facebook AI的工业级NLP开源框架—— Pytext

    PyText是基于NLP深度学习技术.通过Pytorch构建的建模框架.PyText解决了既要实现快速实验又要部署大规模服务模型的经常相互冲突.并且,Facebook已经采用了使用PyText快速迭代 ...

  3. Head First Python-python面向对象

    与大多数其他的编程语言一样,Python容许创建并定义面向对象的类,类可以将代码与代码处理的数据相关联. 对于更加复杂的数据,一般的列表已经不能满足需求了. 我们可以使用字典dict将数据值与键相关联 ...

  4. Vue2.2版本学习小结

    一.项目初始化继续参考这里 https://github.com/vuejs-templates/webpack-simple 或者 https://github.com/vuejs-template ...

  5. python摸爬滚打之day030----进程

    1.操作系统了解 现代的计算机系统主要是由一个或者多个处理器,主存,硬盘,键盘,鼠标,显示器,打印机,网络接口及其他输入输出设备组成, 这些都是硬件设备, 而操作系统就是负责调用这些硬件为用户服务的. ...

  6. LG3834 可持久化线段树1

    题意 给定\(N\)个整数构成的序列,将对于指定的闭区间查询其区间内的第\(K\)小值. $n \leq 2 \times 10^5 $ 思路 在\([l,r]\)区间内的数的个数,可以用\(sum[ ...

  7. pandas(二)

    层级索引: index=[('a',2010),('b',2011),('c',2010'),('a',2012),('e',2010),('f',2011)] age=[18,17,18,16,18 ...

  8. springcloud第三步:发布服务消费者

    服务消费者 创建项目sercice-order Maven依赖 <parent> <groupId>org.springframework.boot</groupId&g ...

  9. div 拖拽

    html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  10. #20175201 实验一 Java开发环境的熟悉(Linux + Eclipse)

    一.实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. (一)命令行下Java程序开发 1.过程 2.结果 调试代码遇到的问题: 解决 ...