BZOJ 4810 [Ynoi2017]由乃的玉米田(莫队+bitset)
【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=4810
【题目大意】
给出一个数列,有三种区间查询,
分别查询区间是否存在两个数乘积为x,是否存在两个数和为x,以及是否存在两个数差为x,
【题解】
我们对于询问进行莫队处理,保存当前区间的权值数组,记为F,
同时保存权值数组的反向数组G
那么存在差为x的情况只要存在一组F[i]&F[i-x]=1即可
存在和为x的情况只要存在一组F[i]&G[M-x+i]即可。
对于乘积为x的情况,我们枚举x的约数,判断F[i]&F[x/i]是否存在。
复杂度O(nsqrt(n)+nm/w)
【代码】
#include <cstdio>
#include <algorithm>
#include <bitset>
#include <cmath>
using namespace std;
const int N=100010,M=100000;
int limit,n,m,pos[N],a[N],ans[N],cnt[N];
bitset<N> F,G;
struct Q{
int l,r,x,id,op;
friend bool operator < (const Q &a,const Q &b){
return pos[a.l]<pos[b.l]||(pos[a.l]==pos[b.l]&&a.r<b.r);
}
}ask[M];
int read(int &x){
int f=1;char ch=getchar();x=0;
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
x*=f;
}
int main(){
read(n); read(m);
limit=(int)sqrt(n+0.5);
for(int i=1;i<=n;i++)read(a[i]),pos[i]=(i-1)/limit+1;
for(int i=1;i<=m;i++)read(ask[i].op),read(ask[i].l),read(ask[i].r),read(ask[i].x),ask[i].id=i;
sort(ask+1,ask+m+1);
for(int i=1,l=1,r=0;i<=m;i++){
for(;r<ask[i].r;r++)cnt[a[r+1]]++,F.set(a[r+1]),G.set(M-a[r+1]);
for(;l>ask[i].l;l--)cnt[a[l-1]]++,F.set(a[l-1]),G.set(M-a[l-1]);
for(;l<ask[i].l;l++){cnt[a[l]]--;if(!cnt[a[l]])F.reset(a[l]),G.reset(M-a[l]);}
for(;r>ask[i].r;r--){cnt[a[r]]--;if(!cnt[a[r]])F.reset(a[r]),G.reset(M-a[r]);}
if(ask[i].op==1){if((F&(F>>ask[i].x)).any())ans[ask[i].id]=1;}
else if(ask[i].op==2){if((F&(G>>(M-ask[i].x))).any())ans[ask[i].id]=1;}
else{
for(int j=1;j*j<=ask[i].x;j++)if(ask[i].x%j==0){
if(F[j]&F[ask[i].x/j]){ans[ask[i].id]=1;break;}
}
}
}for(int i=1;i<=m;i++)puts(ans[i]?"yuno":"yumi");
return 0;
}
BZOJ 4810 [Ynoi2017]由乃的玉米田(莫队+bitset)的更多相关文章
- BZOJ4810:[YNOI2017]由乃的玉米田(莫队,bitset)
Description 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐. 由乃认为玉米田不美,所以她决定出个数据结构题 这个题是这样的: 给你一 ...
- bzoj4810 [Ynoi2017]由乃的玉米田 莫队+bitset(+数论)
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4810 题解 看数据范围和题目名字应该是根号算法. 因为询问除了区间外,还有第 \(3\) 个参 ...
- [BZOJ]4810: [Ynoi2017]由乃的玉米田
Time Limit: 30 Sec Memory Limit: 256 MB Description 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差 ...
- BZOJ 4810 [Ynoi2017]由乃的玉米田 (莫队 + bitset)
题目链接 BZOJ 4810 首先对询问离线, 莫队算法处理. 首先我们可以用bitset维护处当前区间中是否存在某个数. 对于询问1, 我们可以用 ((f >> q[i].x) &am ...
- 【bzoj4810】[Ynoi2017]由乃的玉米田 莫队算法+STL-bitset
题目描述 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐. 由乃认为玉米田不美,所以她决定出个数据结构题 这个题是这样的: 给你一个序列a,长度为n ...
- BZOJ 4810 [Ynoi2017]由乃的玉米田 ——Bitset 莫队算法
加法和减法的操作都能想到Bitset. 然后发现乘法比较难办,反正复杂度已经是$O(n\log{n})$了 枚举因数也不能更差了,直接枚举就好了. #include <map> #incl ...
- 【BZOJ】 4810: [Ynoi2017]由乃的玉米田
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4810 思路还是比较显然,第一反应应该就是莫队. 考虑怎么维护三个询问,想到了要维护每一个数 ...
- LuoguP3674 小清新人渣的本愿 && BZOJ4810: [Ynoi2017]由乃的玉米田
题目地址 小清新人渣的本愿 [Ynoi2017]由乃的玉米田 所以这两题也就输出不一样而已 题解 这种lxl的题还是没修改操作的题基本就是莫队 分开考虑每个询问 1.减法 \(a-b=x⇒a=b+x\ ...
- bzoj4810 [Ynoi2017]由乃的玉米田 bitset优化+暴力+莫队
[Ynoi2017]由乃的玉米田 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 917 Solved: 447[Submit][Status][Di ...
随机推荐
- mac系统用docker安装oracle数据库
oracle没有mac可用的版本,最好的办法是通过docker安装 一.下载docker 1.通过brew下载 brew cask install docker 2.手动下载(需要vpn) https ...
- Windows Server 2008 R2 SP1安装SQL 2012安装报错之0x858C001B
使用Windows Server 2008 R2 SP1安装SQL 2012的时候总是报这样一个错: SQL Server Setup has encountered the following er ...
- cookie、session、localstorage
最早的Cookies问题主要就是太小,大概也就4KB的样子,而且IE6只支持每个域名20个cookies,太少了.优势就是大家都支持,而且支持得还蛮好.cookie的内容主要包括:名字,值,过期时间, ...
- C++获取系统时间的方法
//首先是了解这个结构体,_SYSTEMTIME ,然后通过系统函数GetLocalTime往这个结构体的变量中写入当前系统时间typedef struct _SYSTEMTIME { WORD wY ...
- python之提速千倍爆破一句话
看了一下冰河大佬写的文章特别有感:https://bbs.ichunqiu.com/thread-16952-1-1.html 简单描述一下: 利用传统的单数据提交模式. 比如下面这个一句话木马: & ...
- C++学习之路(五):复制构造函数与赋值运算符重载
之前没有细想过两者的区别,今天对此进行简要记录,后续完善补充. 复制构造函数是在类对象被创建时调用的,但是赋值运算符是被已经存在的对象调用完成赋值操作. 复制构造函数只在对象实例化时才被调用,即在复制 ...
- Linux汇编教程04:寻址方式
这一节,我们主要来讨论寻址方式,这一点十分重要. 我们上一节有稍微提了一下,内存地址引用的通用格式: 地址或偏移(%基址寄存器, %索引寄存器, 比例因子 ) 结果地址 = 地址或偏移 + %基址寄存 ...
- Python基础===使用virtualenv创建一个新的运行环境
virtualenv简直是一个神器,以ubuntu环境为例, 先安装virtualenv 然后执行如下命令: 多版本创建env的方式: virtualenv 虚拟环境文件目录名 python=pyth ...
- Leetcode 之Longest Common Prefix(33)
在一组字符串中找到最长的子串.采用纵向匹配,遇到第一个不匹配的停止. string longestComPrefix(vector<string> &strs) { if (str ...
- http跟https的区别
http: Hypertext transform protocol 超文本传输协议 是一个为了传输超媒体文档(比如html)的应用层协议 是为了web的浏览器跟web的server端的交流而设计的, ...