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

Posted 小蒟蒻yyb的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷3674小清新人渣的本愿(莫队,bitset)相关的知识,希望对你有一定的参考价值。

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

题面

洛谷,自己去看去,太长了

题解

很显然的莫队。
但是怎么查询那几个询问。
对于询问乘积,显然可以暴力枚举因数(反正加起来也是\(O(n\sqrt{n})\)
对于加减????暴力显然\(GG\)
所以我们来用\(bitset\)玄学优化一下。。。
然后就能\(AC\)
时间复杂度?
大概是\(O(n^2/64)\)吧。。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
#include<bitset>
using namespace std;
#define ll long long
#define RG register
#define MAX 111111
inline int read()
{
    RG int x=0,t=1;RG char ch=getchar();
    while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
    if(ch=='-')t=-1,ch=getchar();
    while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
    return x*t;
}
const int MN=100000;
bitset<100005> S1,S2;
struct query{int id,opt,l,r,x,lb;}q[MAX];
bool operator<(query a,query b){if(a.lb!=b.lb)return a.lb<b.lb;return a.r<b.r;}
int num[MAX],a[MAX],n,m,blk;
bool ans[MAX],vis[MAX];
void add(int x){if(!num[x]++)S1[x]=S2[MN-x]=1;}
void del(int x){if(!--num[x])S1[x]=S2[MN-x]=0;}
int main()
{
    n=read();m=read();blk=sqrt(n);
    for(int i=1;i<=n;++i)a[i]=read();
    for(int i=1;i<=m;++i)
    {
        int opt=read(),l=read(),r=read(),x=read();
        q[i]=(query){i,opt,l,r,x,l/blk};
    }
    sort(&q[1],&q[m+1]);
    int L=1,R=0;
    for(int i=1;i<=m;++i)
    {
        while(L>q[i].l)add(a[--L]);
        while(R<q[i].r)add(a[++R]);
        while(L<q[i].l)del(a[L++]);
        while(R>q[i].r)del(a[R--]);
        if(q[i].opt==1)ans[q[i].id]=(S1&(S1>>q[i].x)).any();
        if(q[i].opt==2)ans[q[i].id]=(S1&(S2>>(MN-q[i].x))).any();
        if(q[i].opt==3)
            for(int k=1;k*k<=q[i].x;++k)
                if(q[i].x%k==0)
                    if(S1[k]&S1[q[i].x/k]){ans[q[i].id]=true;break;}
    }
    for(int i=1;i<=m;++i)ans[i]?puts("hana"):puts("bi");
    return 0;
}

以上是关于洛谷3674小清新人渣的本愿(莫队,bitset)的主要内容,如果未能解决你的问题,请参考以下文章

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

题解Luogu P3674 小清新人渣的本愿

LuoguP3674 小清新人渣的本愿

luogu P3674

2017年1月新番表预览 待定31部开播

BZOJ 4810 莫队+bitset