题目链接

因为每个数都是\(10^5\)以内,考虑直接用\(bitset\)维护。

\(a-b=x\),其实就是看是否有\(p\)和\(p+x\)同时存在,直接\(bitset\)移位按位与一下就好了。

\(a+b=x\),这个直接搞不好搞,所以考虑转化。

\[a-(N-b)=a+b-N=x-N
\]

其中\(N\)为一个常数,令\(f(x)=N-x\),则有

\[f(b)-f(x)=a
\]

于是再开个\(bitset\)维护\(f(x)\),然后就很显然了。

\(a*b=x\),这个显然没法用\(bitset\)做,但是\(x\)的因数个数是\(\sqrt x\)级别的,所以直接暴力枚举因数就行了。

为了防止负数的出现,上文中的\(N\)取题中的值域上限\(10^5\)

最后套上莫队模板。

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <bitset>
#include <cmath>
#include <iostream>
using namespace std;
const int MAXN = 100010;
bitset <MAXN> p1, p2;
int n, m, a[MAXN];
inline int read(){
int s = 0;
char ch = getchar();
while(ch < '0' || ch > '9') ch = getchar();
while(ch >= '0' && ch <= '9'){ s = s * 10 + ch - '0'; ch = getchar(); }
return s;
}
int Q, v[MAXN], ans[MAXN];
struct ask{
int type, l, r, c, id;
int operator < (const ask A) const{
return l / Q == A.l / Q ? r < A.r : l < A.l;
}
}q[MAXN];
void add(int x){
++v[a[x]];
p1[a[x]] = p2[100000 - a[x]] = 1;
}
void del(int x){
if(!--v[a[x]])
p1[a[x]] = p2[100000 - a[x]] = 0;
}
int main(){
n = read(); m = read(); Q = sqrt(n);
for(int i = 1; i <= n; ++i)
a[i] = read();
for(int i = 1; i <= m; ++i)
scanf("%d%d%d%d", &q[i].type, &q[i].l, &q[i].r, &q[i].c), q[i].id = i;
sort(q + 1, q + m + 1);
int l = 1, r = 0;
for(int i = 1; i <= m; ++i){
while(r < q[i].r) add(++r);
while(l > q[i].l) add(--l);
while(r > q[i].r) del(r--);
while(l < q[i].l) del(l++);
if(q[i].type == 1){
ans[q[i].id] = (p1 & (p1 >> q[i].c)).any();
}else if(q[i].type == 2){
ans[q[i].id] = (p1 & (p2 >> (100000 - q[i].c))).any();
}else{
if(!q[i].c) ans[q[i].id] = v[0];
int sqr = sqrt(q[i].c);
for(int j = 1; j <= sqr; ++j)
if(q[i].c % j == 0)
if(v[j] && v[q[i].c / j]){
ans[q[i].id] = 1;
break;
}
}
}
for(int i = 1; i <= m; ++i)
printf("%s\n", ans[i] ? "hana" : "bi");
return 0;
}

【洛谷 P3674】 小清新人渣的本愿(bitset,莫队)的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

    对于加减,用bitset维护当前每个数有没有 对于乘,暴力枚举约数 然后莫队 复杂度$O(m(\sqrt{n}+\frac{c}{64}))$ #include<bits/stdc++.h> ...

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

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

  8. P3674 小清新人渣的本愿

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

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

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

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

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

随机推荐

  1. 菜鸟教程C++(一)

    一.C++基本语法 C++程序可以定义为对象的集合,这些对象可以通过调用彼此的方法进行交互. 对象:对象具有状态和行为.例如:一只狗的状态:颜色.名称.品种等,行为:摇动.叫唤等.对象是类的实例. 类 ...

  2. JSP的工作原理

    jsp的本质就是一个servlet,jsp在第一次被访问时会被Web容器翻译成servlet index.jsp -> index_jsp.java -> 编译成index_jsp.cla ...

  3. modao账户

    chairman987@163.com 墨刀注册 p@ssw0rd OR 123456

  4. Centos 安装 zookeeper

    下载 下载地址:http://archive.apache.org/dist/zookeeper/ [root@localhost bin]# wget http://archive.apache.o ...

  5. linux 的 两种磁盘扩容

    当LVM分区空间不足的时候,可以进行扩容.主要的扩容方法有两种: 通过空余的磁盘进行扩容,这个方法比较简单,不会对原有数据有影响.将其他LVM分区空间取出一部分给需要扩容的LVM分区.下面就分别具体介 ...

  6. np.concatenate

  7. SQL多个逗号分开的字段值 取对应的数据名称信息

    字段值 函数实现: )) ) as begin set @strs=','+@strs+',' ) ) set @str2='' declare SyncOrderCursor cursor for ...

  8. apicloud打包成apk

    前言:本文是打包vue项目,其他项目也是这样打包 页面的开发过程跟我们平时开发一样,利用vue把页面全部完成,最后进行npm run build将项目打包. 接下来就是apicloud打包的过程,首先 ...

  9. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器前端源码重构(六)- webpack-dev-server 自适应支持手机端访问

    关于EasyDSS EasyDSS商用流媒体服务器解决方案是一套集流媒体点播.转码与管理.直播.录像.检索.时移回看于一体的一套完整的商用流媒体服务器解决方案,EasyDSS高性能RTMP流媒体服务器 ...

  10. LODOP纸张/打印机/份数/打印方向/双面打印 简短问答

    纸张#如何设置纸张纸张设置,参考样例5 http://www.c-lodop.com/demolist/PrintSample5.html纸张的一些优先级 http://www.c-lodop.com ...