思路:

看完这道题根本没有思路啊....

然后我就膜拜了一波题解...

这神tm乱搞思路

维护两个bitset

第一个bitset代表当前区间哪些数出现过

第二个bitset是 maxp-p出现过

差为x的时候  就用第一个bitset与一下它右移x就好了

和为x的时候 就第一个bitset与一下第二个bitset右移maxp-x

乘积为x的时候 就枚举约数,, 暴力判断一下

复杂度是O(nsqrt(n)+n^2/32)的

//By SiriusRen
#include <cmath>
#include <bitset>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=,M=;
int n,m,a[N],Block,block[N],cnt[N],ans[N];
bitset<N>f,g;
struct Node{int op,l,r,x,id;}node[N];
bool cmp(Node a,Node b){
if(block[a.l]==block[b.l])return a.r<b.r;
return a.l<b.l;
}
int main(){
scanf("%d%d",&n,&m),Block=sqrt(n);
for(int i=;i<=n;i++)scanf("%d",&a[i]),block[i]=(i-)/Block+;
for(int i=;i<=m;i++)scanf("%d%d%d%d",&node[i].op,&node[i].l,&node[i].r,&node[i].x),node[i].id=i;
sort(node+,node++m,cmp);
for(int i=,l=,r=;i<=m;i++){
for(;r<node[i].r;r++)cnt[a[r+]]++,f.set(a[r+]),g.set(M-a[r+]);
for(;l>node[i].l;l--)cnt[a[l-]]++,f.set(a[l-]),g.set(M-a[l-]);
for(;l<node[i].l;l++){cnt[a[l]]--;if(!cnt[a[l]])f.reset(a[l]),g.reset(M-a[l]);}
for(;r>node[i].r;r--){cnt[a[r]]--;if(!cnt[a[r]])f.reset(a[r]),g.reset(M-a[r]);}
if(node[i].op==){if((f&(f>>node[i].x)).any())ans[node[i].id]=;}
else if(node[i].op==){if((f&(g>>(M-node[i].x))).any())ans[node[i].id]=;}
else{for(int j=;j*j<=node[i].x;j++)if(node[i].x%j==)
if(f[j]&&f[node[i].x/j]){ans[node[i].id]=;break;}
}
}for(int i=;i<=m;i++)puts(ans[i]?"yuno":"yumi");
}

BZOJ 4810 莫队+bitset的更多相关文章

  1. BZOJ 4939: [Ynoi2016]掉进兔子洞(莫队+bitset)

    传送门 解题思路 刚开始想到了莫队+\(bitset\)去维护信息,结果发现空间不太够..试了各种奇技淫巧都\(MLE\),最后\(\%\)了发题解发现似乎可以分段做..这道题做法具体来说就是开\(3 ...

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

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

  3. YNOI2016:掉进兔子洞 (莫队+bitset)

    YNOI2016:掉进兔子洞 题意简述: 有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间剩下的数的个数和,询问独立. 注意这里删掉指的是一个一个删,不是把等于这 ...

  4. [Luogu 4688] [Ynoi2016]掉进兔子洞 (莫队+bitset)

    [Luogu 4688] [Ynoi2016]掉进兔子洞 (莫队+bitset) 题面 一个长为 n 的序列 a.有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间 ...

  5. BZOJ 4810 [Ynoi2017]由乃的玉米田 (莫队 + bitset)

    题目链接  BZOJ 4810 首先对询问离线, 莫队算法处理. 首先我们可以用bitset维护处当前区间中是否存在某个数. 对于询问1, 我们可以用 ((f >> q[i].x) &am ...

  6. BZOJ 4810 [Ynoi2017]由乃的玉米田(莫队+bitset)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4810 [题目大意] 给出一个数列,有三种区间查询, 分别查询区间是否存在两个数乘积为x ...

  7. BZOJ.4939.[Ynoi2016]掉进兔子洞(莫队 bitset 分组询问)

    BZOJ 洛谷 删掉的数即三个区间数的并,想到bitset:查多个区间的数,想到莫队. 考虑bitset的每一位如何对应每个数的不同出现次数.只要离散化后不去重,每次记录time就可以了. 但是如果对 ...

  8. bzoj千题计划320:bzoj4939: [Ynoi2016]掉进兔子洞(莫队 + bitset)

    https://www.lydsy.com/JudgeOnline/problem.php?id=4939 ans= r1-l1+1 + r2-l2+1 +r3-l3+1 - ∑ min(cnt1[i ...

  9. BZOJ 4939 [Ynoi2016]掉进兔子洞(莫队+bitset)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4939 [题目大意] 给出一个数列,每个询问给出三个区间,问除去三个区间共有的数字外, ...

随机推荐

  1. vino-server服务是啥服务

    近期接手一个项目,开始梳理服务器,突然发现有个进程是开启5900远程桌面端口的, 在不知情的情况下怕被人给利用了,啥也不说,先干掉再说. server端开启vino-server,允许别人查看自己的桌 ...

  2. Java数组数据类型

    Java数组数据类型 数组是多个相同类型的数据的组合,数组中的元素可以是任何类型的数据: 一维数组 package com.ahabest.array; public class ArratTest ...

  3. Nginx +tomcat 实现负载均衡集群

    一.       工具   nginx-1.8.0 apache-tomcat-6.0.33 二.    目标   实现高性能负载均衡的Tomcat集群: 三.    步骤   1.首先下载Nginx ...

  4. LDAP个人理解

    在新的公司办公,所有的后台系统或文档系统都公用一个LDAP账号. 接触到这个新名词,就查了一下,谈谈个人理解: LDAP是个协议, 简单地说,可以把LDAP服务理解为一套存放你账户密码的数据库系统.市 ...

  5. Django 初学

    一.什么是web框架 框架,即framework  ['fremwɝk],特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞 ...

  6. JDK,JRE,JVM三者关系

    已上图,如有疏漏错误请在下面评论区指出,感激不尽!

  7. Vue项目搭建及原理四

    四.Vue-cli工作原理及Vue实例创建,工作原理 (一)Vue-cli原理 1.webpack其实使用了node.js的express网页服务器来进行处理网页相关的数据,相当于使用一个类似apac ...

  8. Django——3 模板路径 模板变量 常用过滤器 静态文件的使用

    Django 模板路径 模板变量 过滤器 静态文件的加载 模板的路径,有两种方法来使用 设置一个总的templates在大项目外面,然后在sittings的TEMPLATES中声明 在每一个APP中创 ...

  9. datetime库 日期与时间

    datetime是一个关于时间的库,主要包含的类有: date    日期对象,常用的属性有year,month,day time 时间对象,hour,minute,second,毫秒 datetim ...

  10. Windows学习总结(7)——学会CMD命令提示符的重要性

    作为普通电脑用户,大家接触最多的应该 是可视的操作系统界面.可是如果想真正学好计算机,学习好命令提示符可就是必不可少的.它可以更高效的帮助我们处理问题. 命令提示符是在操作系统中,提示进行命令输入的一 ...