想看题目的我。

我刚开始觉得这道题目好难。

直到我从Awson大佬那儿了解到有一个叫做bitset的STL,这道题目就很容易被解开了。

想知道这个神奇的bitset的我。

这个题目一看就感觉是莫队,其实是别人告诉我的,分块不太好弄。

减法:$$a-b=x => a=x+b$$就是在权值数组上右移x位。

加法同理。

至于乘法,直接暴力找因子,反正是\(\sqrt{n}\)复杂度。

时间复杂度显然是:\(O(\)能过\()\)


code:

#include <bits/stdc++.h>
using namespace std; const int N=100010;
struct ask {
int opt,l,r,x,ans,id,ord;
}q[N];
bitset <N> S1,S2;
int n,m,a[N],L=1,R,len,cnt[N]; bool cmp1(ask s,ask t)
{
return s.id==t.id?s.r<t.r:s.id<t.id;
} bool cmp2(ask s,ask t)
{
return s.ord<t.ord;
} void del(int i)
{
if (!--cnt[i]) S1[i]=S2[N-i]=0;
} void ins(int i)
{
if (!cnt[i]++) S1[i]=S2[N-i]=1;
} void Mo(int i)
{
while (L<q[i].l) del(a[L++]);
while (L>q[i].l) ins(a[--L]);
while (R<q[i].r) ins(a[++R]);
while (R>q[i].r) del(a[R--]);
if (q[i].opt==1) q[i].ans=(S1>>q[i].x&S1).any();
if (q[i].opt==2) q[i].ans=(S2>>(N-q[i].x)&S1).any();
if (q[i].opt==3) {
for (int j=1;j*j<=q[i].x;j++)
if (q[i].x%j==0&&S1[j]&&S1[q[i].x/j]) {
q[i].ans=1;break;
}
}
} int main()
{
ios::sync_with_stdio(false);
cin>>n>>m;
len=sqrt(n);
for (int i=1;i<=n;i++) cin>>a[i];
for (int i=1;i<=m;i++) {
cin>>q[i].opt>>q[i].l>>q[i].r>>q[i].x;
q[i].id=q[i].l/len;q[i].ord=i;
}
sort(q+1,q+1+m,cmp1);
for (int i=1;i<=m;i++) Mo(i);
sort(q+1,q+1+m,cmp2);
for (int i=1;i<=m;i++)
q[i].ans?puts("hana"):puts("bi");
return 0;
}

bitset大法好!

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

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

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

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

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

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

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

  4. P3674 小清新人渣的本愿

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. easyui datagrid 批量编辑和提交数据

    easyui datagrid 行编辑和提交方,废话就不多说了,直接上代码 <div style="margin: 5px;"> <table id=" ...

  2. 倍福TwinCAT(贝福Beckhoff)基础教程2.2 TwinCAT常见类型使用和转换_指针

    定义pt为指向INT类型的指针,在程序中取得var_int1的地址(INT类型),然后将地址对应的数据还原给var_int2(pt^的写法)     更多教学视频和资料下载,欢迎关注以下信息: 我的优 ...

  3. springboot缓存及连接池配置

    参见https://coding.imooc.com/lesson/117.html#mid=6412 1.springboot的springweb自己默认以及配置好了缓存,只需要在主文件(XxxAp ...

  4. Android 报错记录

     IOException java.io.IOException: Permission denied: 权限不足.原因可能是: 未加入权限 <uses-permission android ...

  5. zabbix监控第二块网卡是否连通

    配置zabbix客户端配置文件 vim /etc/zabbix/zabbix_agentd.conf 添加  Include=/etc/zabbix/zabbix_agentd.d/ 添加脚本检测网卡 ...

  6. [linux]netstat命令详解-显示linux中各种网络相关信息

    1.功能与说明 netstat 用于显示linux中各种网络相关信息.如网络链接 路由表  接口状态链接 多播成员等等. 2.参数含义介绍 -a (all)显示所有选项,默认不显示LISTEN相关-t ...

  7. php代码中使用换行及(\n或\r\n和br)的应用

    浏览器识别不了\n或\r\n,这两个换行符是文本换行符,文本文件有效;假设须要将结果输出到浏览器或打印到显示器,代码中使用br;假设仅仅是在源码中换行.则使用\n或\r\n,感兴趣的朋友能够了解下,也 ...

  8. php匿名函数和闭包函数及use关键字传参及Closure匿名函数类

    php闭包函数用use传参有什么意义?答:use引用外层变量,比如全局变量 Closure,匿名函数,是php5.3的时候引入的,又称为Anonymous functions.字面意思也就是没有定义名 ...

  9. [ Laravel 5.6 文档 ]laravel数据库操作分页(自定义分页实现和自定义分页样式)

    简介 在其他框架中,分页可能是件非常痛苦的事,Laravel 让这件事变得简单.易于上手.Laravel 的分页器与查询构建器和 Eloquent ORM 集成在一起,并开箱提供方便的.易于使用的.基 ...

  10. RealProxy AOP过滤方法的参数

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...