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


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

    题面

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

    题解

    很显然的莫队。
    但是怎么查询那几个询问。
    对于询问乘积,显然可以暴力枚举因数(反正加起来也是(O(nsqrt{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;
    }
    
    
  • 相关阅读:
    《图解HTTP》读书笔记
    Python3 官方文档翻译
    Python3 官方文档翻译
    支付宝Payto接口的C#.net实现方法
    updatepanel用法之triggers(局部刷新,全部刷新)使用示例
    SQL Server中解决死锁
    js字符串与16进制互相转换
    文字超出隐藏并显示省略号,表格固定表头,两表格左右对齐,
    SQL Server中行列转换 Pivot UnPivot
    查看SQL Server日志 Part 1
  • 原文地址:https://www.cnblogs.com/cjyyb/p/8783389.html
Copyright © 2020-2023  润新知