对于加减,用bitset维护当前每个数有没有

对于乘,暴力枚举约数

然后莫队

复杂度$O(m(\sqrt{n}+\frac{c}{64}))$

 #include<bits/stdc++.h>
#define pa pair<ll,ll>
#define CLR(a,x) memset(a,x,sizeof(a))
#define MP make_pair
using namespace std;
typedef long long ll;
const int maxn=1e5+; inline char gc(){
return getchar();
static const int maxs=<<;static char buf[maxs],*p1=buf,*p2=buf;
return p1==p2&&(p2=(p1=buf)+fread(buf,,maxs,stdin),p1==p2)?EOF:*p1++;
}
inline ll rd(){
ll x=;char c=gc();bool neg=;
while(c<''||c>''){if(c=='-') neg=;c=gc();}
while(c>=''&&c<='') x=(x<<)+(x<<)+c-'',c=gc();
return neg?(~x+):x;
} int N,V,NN,M,v[maxn];
struct Node{
int o,l,r,x,i;
}q[maxn];
bool ans[maxn];
int cnt[maxn];
bitset<> b1,b2; inline bool cmp(Node a,Node b){
return a.l/NN==b.l/NN?((a.l/NN)&?a.r<b.r:a.r>b.r):a.l<b.l;
} inline void solve(int p,int d){
if(!cnt[v[p]]) b1[v[p]]=,b2[V-v[p]]=;
cnt[v[p]]+=d;
if(!cnt[v[p]]) b1[v[p]]=,b2[V-v[p]]=;
} int main(){
//freopen("","r",stdin);
int i,j,k;
N=rd(),NN=sqrt(N),M=rd();
for(i=;i<=N;i++) v[i]=rd(),V=max(V,v[i]);
for(i=;i<=M;i++){
q[i].o=rd(),q[i].l=rd(),q[i].r=rd(),q[i].x=rd(),q[i].i=i;
}sort(q+,q+M+,cmp);
int l=,r=;
for(i=;i<=M;i++){
while(r<q[i].r) solve(++r,);
while(r>q[i].r) solve(r--,-);
while(l<q[i].l) solve(l++,-);
while(l>q[i].l) solve(--l,);
if(q[i].o==){
ans[q[i].i]=(b1&(b1<<q[i].x)).count();
}else if(q[i].o==){
ans[q[i].i]=(b1&(q[i].x>V?(b2<<(q[i].x-V)):(b2>>(V-q[i].x)))).count();
}else{
for(j=;j*j<=q[i].x;j++){
if(q[i].x%j==&&b1[j]&&b1[q[i].x/j]){
ans[q[i].i]=;break;
}
}
}
}
for(i=;i<=M;i++){
if(ans[i]) printf("hana\n");
else printf("bi\n");
}
return ;
}

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

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

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

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

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

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

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

  4. [Luogu3674]小清新人渣的本愿

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

  5. Luogu3674小清新人渣的本愿

    https://zybuluo.com/ysner/note/1109536 题面 给你一个序列a,长度为n,有m次操作,每次询问一个区间 是否可以选出两个数它们的差为x 是否可以选出两个数它们的和为 ...

  6. LuoguP3674 小清新人渣的本愿 && BZOJ4810: [Ynoi2017]由乃的玉米田

    题目地址 小清新人渣的本愿 [Ynoi2017]由乃的玉米田 所以这两题也就输出不一样而已 题解 这种lxl的题还是没修改操作的题基本就是莫队 分开考虑每个询问 1.减法 \(a-b=x⇒a=b+x\ ...

  7. P3674 小清新人渣的本愿

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

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

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

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

    题目链接 因为每个数都是\(10^5\)以内,考虑直接用\(bitset\)维护. \(a-b=x\),其实就是看是否有\(p\)和\(p+x\)同时存在,直接\(bitset\)移位按位与一下就好了 ...

随机推荐

  1. c# Mongodb两个字段不相等 MongoDB原生查询

    var document = new BsonDocument{ { "$where","this.StarTime!=this.EndTime"}, { }, ...

  2. HTTP之referrer

    我们知道,在页面引入图片.JS 等资源,或者从一个页面跳到另一个页面,都会产生新的 HTTP 请求,浏览器一般都会给这些请求头加上表示来源的 Referrer 字段.Referrer 在分析用户来源时 ...

  3. Angular 过滤器

    <!DOCTYPE html><html ng-app="myApp"><head lang="en"> <meta ...

  4. Docker入门了解一下(第一篇)

    最近在学docker.k8s什么的,看得脑子有点乱.从来没弄过在linux上搭建一个分布式的环境,所以对这些不太了解,还是从最简单的地方剖析吧. Docker学习传送:http://www.ityou ...

  5. JS 将值插入数组中

    使用 push 方法 1.var arr = [1,2,3] arr.push(数值) 或者 arr.push({xxx:数值}) 2.输出数组中的最后一个 console.log(arr.[arr. ...

  6. Java内存泄漏分析

    https://www.javatang.com/archives/2017/11/08/11582145.html?tdsourcetag=s_pcqq_aiomsg

  7. linux ps命令用法

    -A    列出所有的进程-w    显示加宽可以显示较多的资讯-au    显示较详细的资讯-aux    显示所有包含其他使用者的行程 -A 显示所有进程(等价于-e)(utility)-a 显示 ...

  8. Prism框架中加载类库中时其中第三方类dll提示无法加载程序集

    Prism框架是采用一种依赖注入的方式动态加载程序集,能够在程序需要加载的时候将程序集注入到里面去,实现程序的热插拔效果,而且采用这种框架能够让我们进行一个大项目的独立开发,在最近的一个项目中在独立开 ...

  9. SpringBoot 标签之启动

    在SpringBoot中入口我们使用: package com.sankuai.qcs.regulation.traffic; import org.springframework.boot.Spri ...

  10. delphi中adoquery控件中某个字段Onvalidate事件的用法?

    procedure TForm2.ADOQuery1TestFieldValidate(Sender: TField);begin// Sender就是当前字段,可以在这里对Sender字段进行各种操 ...