这题是莫队维护bitset。

然而我并不会bitset以前讲过认为不考就没学

我真的太菜了。

首先维护一个权值的bitset——s。

操作3比较简单,我们可以\(\sqrt{x}\)枚举约数然后判断就行了。

操作1就是求是否存在

\[\exists{a,b},a-b=x
\]

移一下项

\[a=x+b
\]

也就是\(\text{(s<<x)}\)&\(x\neq0\)。

那么操作2该怎么办?

我们先设\(b'=n-b\)因为\(x=a+b\)

\[a-b'=a-(n-b)=a+b-n=x-n
\]

然后类比操作1就行了。

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. #include<cmath>
  5. #include<algorithm>
  6. #include<bitset>
  7. using namespace std;
  8. const int N=100101;
  9. int n,m,a[N],block[N],cnt[N];
  10. string ans[N];
  11. struct ques{
  12. int l,r,type,id,x;
  13. }qu[N];
  14. bool cmp(ques a,ques b){
  15. if(block[a.l]==block[b.l])return a.r<b.r;
  16. else return block[a.l]<block[b.l];
  17. }
  18. bitset<N> x,y;
  19. int read(){
  20. int sum=0,f=1;char ch=getchar();
  21. while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
  22. while(ch>='0'&&ch<='9'){sum=sum*10+ch-'0';ch=getchar();}
  23. return sum*f;
  24. }
  25. int main(){
  26. n=read();m=read();
  27. int Block=sqrt(n);
  28. for(int i=1;i<=n;i++)a[i]=read(),block[i]=(i-1)/Block+1;
  29. for(int i=1;i<=m;i++)qu[i].type=read(),qu[i].l=read(),qu[i].r=read(),qu[i].x=read(),qu[i].id=i;
  30. sort(qu+1,qu+1+m,cmp);
  31. int l=1,r=0;
  32. for(int i=1;i<=m;i++){
  33. while(r<qu[i].r){
  34. r++;
  35. cnt[a[r]]++;
  36. if(cnt[a[r]]==1)x[a[r]]=1,y[n-a[r]]=1;
  37. }
  38. while(l>qu[i].l){
  39. l--;
  40. cnt[a[l]]++;
  41. if(cnt[a[l]]==1)x[a[l]]=1,y[n-a[l]]=1;
  42. }
  43. while(r>qu[i].r){
  44. if(cnt[a[r]]==1)x[a[r]]=0,y[n-a[r]]=0;
  45. cnt[a[r]]--;
  46. r--;
  47. }
  48. while(l<qu[i].l){
  49. if(cnt[a[l]]==1)x[a[l]]=0,y[n-a[l]]=0;
  50. cnt[a[l]]--;
  51. l++;
  52. }
  53. if(qu[i].type==1){
  54. if((x&(x<<qu[i].x)).any())ans[qu[i].id]="hana";
  55. else ans[qu[i].id]="bi";
  56. }
  57. else if(qu[i].type==2){
  58. if(qu[i].x-n>=0){
  59. if(((y<<(qu[i].x-n))&x).any())ans[qu[i].id]="hana";
  60. else ans[qu[i].id]="bi";
  61. }
  62. else{
  63. if(((x<<(n-qu[i].x))&y).any())ans[qu[i].id]="hana";
  64. else ans[qu[i].id]="bi";
  65. }
  66. }
  67. else{
  68. for(int j=1;j<=sqrt(qu[i].x);j++)
  69. if(qu[i].x%j==0&&x[j]&&x[qu[i].x/j])ans[qu[i].id]="hana";
  70. if(ans[qu[i].id]!="hana")ans[qu[i].id]="bi";
  71. }
  72. }
  73. for(int i=1;i<=m;i++)cout<<ans[i]<<endl;
  74. return 0;
  75. }

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

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

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

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

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

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

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

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

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

  5. P3674 小清新人渣的本愿

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

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

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

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

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

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

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

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

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

随机推荐

  1. 细数ZBrush这些年的心路历程

    ZBrush 的出现,带来了一场3D造型的革命.它完全颠覆了传统三维设计工具的工作模式,将3D空间绘图这种全新的设计理念呈现在广大设计师面前,强大的雕塑建模功能和颜色绘制功能释放了艺术家的灵感,让设计 ...

  2. 脚本_求和100以内的正整数.sh

    #!bin/bash#功能:求和100以内的正整数#作者:liusingbon#seq 100 可以快速自动生成 100 个整数sum=0for i in $(seq 100)do    sum=$[ ...

  3. Eclipse本地创建新的GIT分支,并推送至远程Git分支

    本地创建新的GIT分支: 1.右击要创建新分支的项目——Team——Switch To——New Branch…: 2.在弹出的对话框中name框中输入要创建的分支名称,(如果是当前显示的要拷贝的分支 ...

  4. jq——动画

    基本 1 show(可加时间)显示[在效果完成后可执行函数] 2 hide(可加时间)隐藏 3 toggle():切换效果 [在show和hide中切换] 有函数时 滑动动画 1 slideDown: ...

  5. UVA272-TEX Quotes(紫书例题3.1)

    TeX is a typesetting language developed by Donald Knuth. It takes source text together with a few ty ...

  6. WordCount合作--自己部分

    前言: (1)合作者:201631062127,201631062625 (2)合作代码地址:WordCount 一.结对的PSP表格: PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟 ...

  7. [剑指offer] 8+9. 跳台阶+变态跳台阶 (递归 时间复杂度)

    跳台阶是斐波那契数列的一个典型应用,其思路如下: # -*- coding:utf-8 -*- class Solution: def __init__(self): self.value=[0]*5 ...

  8. Git:与GitHub搭配及SSH登录

    远程库(GitHub)上的地址 搭建本地库 准备一个文件 将地址用别名存在git上 推送到远程库 克隆 克隆的效果 1)完整的把远程库下载到本地 2)别名也完整保留 3)同时也初始化了本地库 邀请团队 ...

  9. 记一次BootStrap的使用

    效果图如下: 一.简介: 什么是Bootstrap?  Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架. 什么是响应式布局? 引用一句Bootstrap的标题语 “Boots ...

  10. 洛谷 P3047 [USACO12FEB]附近的牛Nearby Cows

    P3047 [USACO12FEB]附近的牛Nearby Cows 题目描述 Farmer John has noticed that his cows often move between near ...