题目

题目背景
本题时限3s,空间128MB

我感觉我要挂省选

人渣的本愿是一个有趣的番

可爱的花火喜欢从小和她谈♂笑♂风♂生的欧♂尼♂酱鸣海,欧尼酱特别想当老师,然后剧本安排当了花火的班主任。

然而有个叫做皆川茜的奇怪的人抢走了欧尼酱!

花火就很失落呀,然后看到一个叫做麦的人也很失落,原来麦喜欢茜老师。。。

花火和麦从此天天谈笑风生,然后决定在一起,把对方当做自己喜欢的人的替代品

因为花火很可爱,所以有许多奇怪的人喜欢花火,比如一个叫做绘鸠早苗的妹子

因为麦长的也不错,所以有许多奇怪的人喜欢麦,比如一个叫做最可的妹子

然后就开始愉快的生♂活了~

以上内容如果你没有看过这个番可以无视掉

按照套路,现在欧尼酱会问花火一个OI问题(一般是数据结构),然后花火肯定不会OI,所以会来请教您这位IOI Au选手,然后您肯定会帮助她

但是 这个套路太无聊了,我们来换一个(但是不会改变您是IOI Au选手的事实)

花火有一天看了几个有趣的番,叫做“在W??身上寻找女装是否搞错了什么”,“从女装开始的?X?”,“我家大佬不可能那么可爱”,然后发现??H太厉害了,然后就穿越到了异世界,和???谈笑风生

花火就和???做了一个交♂易,花火帮???做一道题,然后???帮花火改写地球online的程序,让花火和欧尼酱在♂一♂起

???虽然非常厉害,但是不会数据结构题,他最近刚刚遇到一道有趣的数据结构题,于是他接受了交易

但是花火也不会数据结构题呀

所以又回到了这个老套路,就靠您这个IOI Au选手来帮她了!

以上内容如果你没有看过这个番还是可以无视掉

这里用一个经典的图来解释这个关系(其实没那么蛋疼的)

题目描述
这个题是这样的:

给你一个序列 aa,长度为 nn,有 mm 次操作,每次询问一个区间是否可以选出两个数它们的差为 xx,或者询问一个区间是否可以选出两个数它们的和为 xx,或者询问一个区间是否可以选出两个数它们的乘积为 xx ,这三个操作分别为操作 1,2,31,2,3。

选出的这两个数可以是同一个位置的数。

输入格式
第一行两个数 n,mn,m。

后面一行 nn 个数表示 a_ia
i

后面 mm 行每行四个数 opt l r x。

optopt 表示这个是第几种操作,l,rl,r 表示操作的区间,xx 表示这次操作的 xx。

输出格式
对于每个询问,如果可以,输出 hana,否则输出 bi。

输入输出样例
输入 #1复制
10 10
1 1 8 9 9 1 1 1 1 9
3 5 9 42
2 1 3 14
2 3 5 2
2 3 3 6
1 6 10 18
3 4 9 14
2 1 4 22
3 1 3 32
2 5 6 32
3 1 9 17
输出 #1复制
bi
bi
bi
bi
bi
bi
bi
bi
bi
bi
输入 #2复制
5 5
1 1 2 3 4
2 1 1 2
1 1 2 2
3 1 1 1
3 5 5 16
1 2 3 4
输出 #2复制
hana
bi
hana
hana
bi
说明/提示
定义 cc 为每次的 xx 和 a_ia
i

中的最大值,a_i \geq 0a
i

≥0,每次的 x\geq 2x≥2。

对于 10%10% 的数据,n,m,c \leq 100n,m,c≤100。

对于另外 10%10% 的数据,n,m,c \leq 3\times 10^3n,m,c≤3×10
3

对于另外 10%10% 的数据,只有 11 操作。

对于另外 10%10% 的数据,只有 22 操作。

对于另外 10%10% 的数据,只有 33 操作。

对于 100%100% 的数据,n,m,c \leq 10^5n,m,c≤10
5

思路

加减bitset维护,乘法枚举约数
用莫队解决

代码

#include<bits/stdc++.h>
#define N 100000
#define M 20000005
using namespace std;
struct Query{int k,l,r,x,id;}q[N+5];
int m,n,l,r,s;
int a[N+5],c[N+5],ans[N+5],rt[N+5];
bitset<N+5> now1,now2;
char DR[M+10],*P=DR;
inline bool operator<(Query x,Query y){return rt[x.l]==rt[y.l]?rt[x.l]&1?x.r<y.r:x.r>y.r:rt[x.l]<rt[y.l];
}
struct FastIO{static const int S=1310720;int wpos;char wbuf[S];FastIO():wpos(0) {}inline int xchar(){static char buf[S];static int len=0,pos=0;if(pos==len)pos=0,len=fread(buf,1,S,stdin);if(pos==len)return -1;return buf[pos++];}inline int read(){int c=xchar(),x=0;while(c<=32&&~c)c=xchar();if(c==-1)return -1;for(;'0'<=c&&c<='9';c=xchar())x=x*10+c-'0';return x;}
}io;
inline void init(){n=io.read();m=io.read();s=(int)sqrt(n);for(register int i=1;i<=n;++i)a[i]=io.read();for(register int i=1;i<=n;++i)rt[i]=(i-1)/s+1;for(register int i=1;i<=m;++i){q[i].k=io.read();q[i].l=io.read();q[i].r=io.read();q[i].x=io.read();q[i].id=i;}sort(q+1,q+m+1);l=1;r=0;
}
inline void add(int x){if(c[x]++==0)now1[x]=1,now2[N-x]=1;}
inline void del(int x){if(--c[x]==0)now1[x]=0,now2[N-x]=0;}
int main(){init();for(int i=1;i<=m;i++){for(;q[i].l<l;)add(a[--l]);for(;q[i].l>l;)del(a[l++]);for(;q[i].r<r;)del(a[r--]);for(;q[i].r>r;)add(a[++r]);int k=q[i].k,x=q[i].x;if(k==1){if((now1&(now1<<x)).any())ans[q[i].id]=1;}else if(k==2){if((now1&(now2>>(N-x))).any())ans[q[i].id]=1;}else{for(int j=1;j*j<=x;j++)if(!(x%j))if(now1[j]&&now1[x/j]){ans[q[i].id]=1;break;}}}for (int i=1;i<=m;i++)if(ans[i])puts("hana");else puts("bi");return 0;
}

【luogu P3674】 小清新人渣的本愿相关推荐

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

    https://www.luogu.com.cn/problem/P3674 首先肯定是莫队 然后考虑如何判断,发现差可以直接用bitset 加法就整个数反过来(相当于取补集),然后再bitset 乘 ...

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

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

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

    题目链接: P3674 小清新人渣的本愿 大致题意 给定一个长度为 n n n的序列, 有 m m m次询问操作. 1 l r x 表示询问 [ l , r ] [l, r] [l,r]是否存在 a ...

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

    题目: https://www.luogu.org/problemnew/show/P3674 题目大意: 给你一个长度为 N N N的序列,每次询问[l,r]能不能取出两个数,和或差或积等于C&qu ...

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

    给你一个序列a,长度为n,有m次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ,这三个操作分别 ...

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

    题目描述: 雾 题目分析: 介绍一种很牛的东西 bitset 相减出x只需要查询(a&(a< < x)).any()即可 +法 维护一个反的bitset即可 乘法枚举因数即可 O( ...

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

    题目传送门 这道题是一道莫队题.对于每一种问法,就是查询对应的数是否在当前的区间内. 设$b[i]$表示莫队当前区间中有没有$i$这个数. 对于第一问"是否可以选出两个数它们的差为x&quo ...

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

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

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

    我们利用一个长度为 1e5 的 bitset,当数值 c 出现时,将 c 位置赋值为 1,对于题目要求的操作可以转变为 求 bitset 中存在两个位置相差为 x 的 1 这个比较难,如下图 bits ...

  10. 小清新人渣的本愿(莫队+bitset)

    小清新人渣的本愿 这两天写了些 b i t s e t bitset bitset的题,但都不想写题解...正巧这道题还结合了莫队,也是正在学习的,就记录一下吧. 题意: 给定一个 a a a数组,有 ...

最新文章

  1. NVIDIA Jarvis:一个GPU加速对话人工智能应用的框架
  2. 教程 | OpenCV4中的极坐标变换
  3. chrome 插件开发各种功能demo_Chrome 插件开发全攻略
  4. pytorch 笔记:torch_geometric (1)创建一张图
  5. LISP标注路线桩号_CAD插件标桩号的AutoLISP程序语言求解释并译成中文,谢谢
  6. 【CSS实现Loading遮罩】点击按钮,弹出一个DIV层窗口
  7. 传统公司部署OpenStack(t版)简易介绍(九)——控制台部署
  8. 尝试对知乎网验证码进行处理:
  9. Java日志组件间关系
  10. 全体注意:@live.com 形势不妙,可能三周内被收回
  11. 《精通javascript》5,6章小结(一)
  12. 学生信息管理系统源码
  13. 光环PMP 项目资源管理、项目相关方管理
  14. 4、【办公自动化】Python实现Word转PDF
  15. win7打印机找不到USB001接口的解决方法
  16. c语言json数据解析,C语言库函数解析JSON文件
  17. 如何永久关闭笔记本键盘
  18. 人工智能轨道交通行业周刊-第44期(2023.5.8-5.14)
  19. 软件定义网络基础(SDN④)
  20. Web全栈开发训练营

热门文章

  1. 专访胡润:中国富豪正变得透明
  2. zabbix监控-企业微信webhook告警并使用markdown格式
  3. 阿里腾讯外包Java怎样_阿里Java岗、腾讯后台开发岗面经(拿到AT双Offer)
  4. Jquery利用淘宝接口判断手机运营商和归属地
  5. 最新的Fresco加载Gif图片
  6. 苹果原壁纸高清_30张美女手机高清壁纸苹果手机安卓手机通用
  7. 【0元学】10节美国外教英语课,还赠绘本,5-10岁孩子别错过!
  8. 爱老婆,除了性,还有更价值的东东
  9. 学计算机买电脑看什么,学长学姐很后悔,当初买电脑时就该看看这篇攻略!
  10. PMI、国家外专局-项目管理高端论坛在深圳召开