BZOJ 4810 莫队+bitset
思路:
看完这道题根本没有思路啊....
然后我就膜拜了一波题解...
这神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的更多相关文章
- BZOJ 4939: [Ynoi2016]掉进兔子洞(莫队+bitset)
传送门 解题思路 刚开始想到了莫队+\(bitset\)去维护信息,结果发现空间不太够..试了各种奇技淫巧都\(MLE\),最后\(\%\)了发题解发现似乎可以分段做..这道题做法具体来说就是开\(3 ...
- P3674 小清新人渣的本愿 莫队+bitset
ennmm...bitset能过系列. 莫队+bitset \(\mathcal{O}(m\sqrt n + \frac{nm}{w})\) 维护一个正向的 bitset <N> mem ...
- YNOI2016:掉进兔子洞 (莫队+bitset)
YNOI2016:掉进兔子洞 题意简述: 有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间剩下的数的个数和,询问独立. 注意这里删掉指的是一个一个删,不是把等于这 ...
- [Luogu 4688] [Ynoi2016]掉进兔子洞 (莫队+bitset)
[Luogu 4688] [Ynoi2016]掉进兔子洞 (莫队+bitset) 题面 一个长为 n 的序列 a.有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间 ...
- BZOJ 4810 [Ynoi2017]由乃的玉米田 (莫队 + bitset)
题目链接 BZOJ 4810 首先对询问离线, 莫队算法处理. 首先我们可以用bitset维护处当前区间中是否存在某个数. 对于询问1, 我们可以用 ((f >> q[i].x) &am ...
- BZOJ 4810 [Ynoi2017]由乃的玉米田(莫队+bitset)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4810 [题目大意] 给出一个数列,有三种区间查询, 分别查询区间是否存在两个数乘积为x ...
- BZOJ.4939.[Ynoi2016]掉进兔子洞(莫队 bitset 分组询问)
BZOJ 洛谷 删掉的数即三个区间数的并,想到bitset:查多个区间的数,想到莫队. 考虑bitset的每一位如何对应每个数的不同出现次数.只要离散化后不去重,每次记录time就可以了. 但是如果对 ...
- 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 ...
- BZOJ 4939 [Ynoi2016]掉进兔子洞(莫队+bitset)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4939 [题目大意] 给出一个数列,每个询问给出三个区间,问除去三个区间共有的数字外, ...
随机推荐
- vino-server服务是啥服务
近期接手一个项目,开始梳理服务器,突然发现有个进程是开启5900远程桌面端口的, 在不知情的情况下怕被人给利用了,啥也不说,先干掉再说. server端开启vino-server,允许别人查看自己的桌 ...
- Java数组数据类型
Java数组数据类型 数组是多个相同类型的数据的组合,数组中的元素可以是任何类型的数据: 一维数组 package com.ahabest.array; public class ArratTest ...
- Nginx +tomcat 实现负载均衡集群
一. 工具 nginx-1.8.0 apache-tomcat-6.0.33 二. 目标 实现高性能负载均衡的Tomcat集群: 三. 步骤 1.首先下载Nginx ...
- LDAP个人理解
在新的公司办公,所有的后台系统或文档系统都公用一个LDAP账号. 接触到这个新名词,就查了一下,谈谈个人理解: LDAP是个协议, 简单地说,可以把LDAP服务理解为一套存放你账户密码的数据库系统.市 ...
- Django 初学
一.什么是web框架 框架,即framework ['fremwɝk],特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞 ...
- JDK,JRE,JVM三者关系
已上图,如有疏漏错误请在下面评论区指出,感激不尽!
- Vue项目搭建及原理四
四.Vue-cli工作原理及Vue实例创建,工作原理 (一)Vue-cli原理 1.webpack其实使用了node.js的express网页服务器来进行处理网页相关的数据,相当于使用一个类似apac ...
- Django——3 模板路径 模板变量 常用过滤器 静态文件的使用
Django 模板路径 模板变量 过滤器 静态文件的加载 模板的路径,有两种方法来使用 设置一个总的templates在大项目外面,然后在sittings的TEMPLATES中声明 在每一个APP中创 ...
- datetime库 日期与时间
datetime是一个关于时间的库,主要包含的类有: date 日期对象,常用的属性有year,month,day time 时间对象,hour,minute,second,毫秒 datetim ...
- Windows学习总结(7)——学会CMD命令提示符的重要性
作为普通电脑用户,大家接触最多的应该 是可视的操作系统界面.可是如果想真正学好计算机,学习好命令提示符可就是必不可少的.它可以更高效的帮助我们处理问题. 命令提示符是在操作系统中,提示进行命令输入的一 ...