【BZOJ4810】[Ynoi2017]由乃的玉米田

Description

由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美。这排玉米一共有N株,它们的高度参差不齐。由乃认为玉米田不美,所以她决定出个数据结构题
这个题是这样的:
给你一个序列a,长度为n,有m次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ,这三个操作分别为操作1,2,3选出的这两个数可以是同一个位置的数

Input

第一行两个数n,m
后面一行n个数表示ai
后面m行每行四个数opt l r x
opt表示这个是第几种操作,l,r表示操作的区间,x表示这次操作的x
定义c为每次的x和ai中的最大值,ai >= 0,每次的x>=2n,m,c <= 100000

Output

对于每个询问,如果可以,输出yuno,否则输出yumi

Sample Input

5 5
1 1 2 3 4
2 1 1 2
1 1 2 2
3 1 1 1
3 5 5 16
1 2 3 4

Sample Output

yuno
yumi
yuno
yuno
yumi

题解:区间询问当然是用莫队来水啊~

对于差为x,直接在bitset上搞就行了;对于和为x,我们维护一个翻转的bitset,然后转化成差为x的问题来搞;对于乘积为x,我们直接开个桶,用sqrt(x)的复杂度枚举x的约数就行了。

小号交题一次提交顺利成为status倒数第一,大号提交先TLE了两次,然后加了一堆优化后顺利成为status倒数第二,试问还有谁~~~所以千万不要拿我的代码当做标程来拍。

#include <cstdio>
#include <iostream>
#include <cstring>
#include <bitset>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxn=100010;
bitset<maxn*2> b1,b2;
int n,m,B;
int v[maxn],st[maxn*2],ans[maxn];
struct QUERY
{
int qa,qb,qk,qx,org;
}q[maxn];
bool cmp(QUERY a,QUERY b)
{
return (a.qa/B==b.qa/B)?(a.qb<b.qb):(a.qa/B<b.qa/B);
}
void ins(int x)
{
if(!st[x]) b1[x]=b2[100000-x]=1;
st[x]++;
}
void del(int x)
{
st[x]--;
if(!st[x]) b1[x]=b2[100000-x]=0;
}
int rd()
{
int ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-')f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
int main()
{
n=rd(),m=rd();
B=(int)sqrt((double)n);
int i,j,l=1,r=0;
for(i=1;i<=n;i++) v[i]=rd();
for(i=1;i<=m;i++) q[i].qk=rd(),q[i].qa=rd(),q[i].qb=rd(),q[i].qx=rd(),q[i].org=i;
sort(q+1,q+m+1,cmp);
for(i=1;i<=m;i++)
{
while(l>q[i].qa) ins(v[--l]);
while(r<q[i].qb) ins(v[++r]);
while(l<q[i].qa) del(v[l++]);
while(r>q[i].qb) del(v[r--]);
if(q[i].qk==1) ans[q[i].org]=((b1<<q[i].qx)&b1).any();
if(q[i].qk==2) ans[q[i].org]=((b1<<100000)&(b2<<q[i].qx)).any();
if(q[i].qk==3) for(j=1;j*j<=q[i].qx&&!ans[q[i].org];j++) if(q[i].qx%j==0&&st[j]&&st[q[i].qx/j]) ans[q[i].org]=1;
}
for(i=1;i<=m;i++)
{
if(ans[i]) printf("yuno\n");
else printf("yumi\n");
}
return 0;
}

【BZOJ4810】[Ynoi2017]由乃的玉米田 bitset+莫队的更多相关文章

  1. BZOJ4810 Ynoi2017由乃的玉米田(莫队+bitset)

    多组询问不强制在线,那么考虑莫队.bitset维护当前区间出现了哪些数,数组记录每个数的出现次数以维护bitset.对于乘法,显然应有一个根号范围内的因子,暴力枚举即可.对于减法,a[i]-a[j]= ...

  2. BZOJ 4810 [Ynoi2017]由乃的玉米田 ——Bitset 莫队算法

    加法和减法的操作都能想到Bitset. 然后发现乘法比较难办,反正复杂度已经是$O(n\log{n})$了 枚举因数也不能更差了,直接枚举就好了. #include <map> #incl ...

  3. bzoj4810 [Ynoi2017]由乃的玉米田 bitset优化+暴力+莫队

    [Ynoi2017]由乃的玉米田 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 917  Solved: 447[Submit][Status][Di ...

  4. 【BZOJ4810】[YNOI2017] 由乃的玉米田(莫队+bitset)

    点此看题面 大致题意: 给你一段序列,每次询问一段区间内是否存在两个数的差或和或积为\(x\). 莫队算法 看到区间询问+可以离线,首先想到了莫队啊. 但是,在较短的时间内更新信息依然比较难以实现. ...

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

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

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

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

  7. bzoj 4810 由乃的玉米田 - bitset - 莫队算法

    由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐. 由乃认为玉米田不美,所以她决定出个数据结构题   这个题是这样的: 给你一个序列a,长度为n,有m ...

  8. LuoguP3674 小清新人渣的本愿 && BZOJ4810: [Ynoi2017]由乃的玉米田

    题目地址 小清新人渣的本愿 [Ynoi2017]由乃的玉米田 所以这两题也就输出不一样而已 题解 这种lxl的题还是没修改操作的题基本就是莫队 分开考虑每个询问 1.减法 \(a-b=x⇒a=b+x\ ...

  9. BZOJ4810:[YNOI2017]由乃的玉米田(莫队,bitset)

    Description 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐. 由乃认为玉米田不美,所以她决定出个数据结构题   这个题是这样的: 给你一 ...

随机推荐

  1. 一个简单的JS函数,用于判断文本是否数字

    /****************************************************** 判断是否是数字(整数,小数均可,不包括负数)* 2014年10月10日22:38:19* ...

  2. Python——调用shell命令的三种方法

    1.用os.system(cmd)   不过取不了返回值 2.用os.popen(cmd)   要得到命令的输出内容,只需再调用下read()或readlines()等 如a=os.popen(cmd ...

  3. hibernate.cfg.xml文件连接mySql、Oracle、SqlServer配置

    1.连接mySql,文件配置如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibe ...

  4. Oracle 和sqlserver 字符串补齐

    Oracle:Lpad函数 语法格式如下: lpad( string, padded_length, [ pad_string ] ) string 准备被填充的字符串: padded_length ...

  5. H5页面在IOS下不会自动播放音乐的坑

    document.addEventListener(‘DOMContentLoaded‘, function () { function audioAutoPlay() { var audio = d ...

  6. spring学习笔记(五)

    1.后置通知 需求:调用相应业务方法后,完成资源的关闭. a. 在beans.xml中配置 .... <beans> <!--配置被代理对象--> <bean id=&q ...

  7. 查看tensorflow版本和存储位置

    >>>import tensorflow as tf >>>tf.__version__ __是两个下划线,中间有空格 >>>tf.__path_ ...

  8. Atitit.编程语言新特性 通过类库框架模式增强 提升草案 v3 q27

    Atitit.编程语言新特性 通过类库框架模式增强 提升草案 v3 q27 1. 修改历史2 2. 适用语言::几乎所有编程语言.语言提升的三个渠道::语法,类库,框架,ide2 2.1. 单根继承  ...

  9. pthread_cleanup_push和pthread_cleanup_pop清除函数是否执行的说明

    示例1: #include <stdio.h> #include <pthread.h> void* clean(void* arg) { printf("clean ...

  10. linux 下安装svn服务

    鉴于在搭建时,参考网上很多资料,网上资料在有用的同时,也坑了很多人 本文的目的,也就是想让后继之人在搭建svn服务器时不再犯错,不再被网上漫天的坑爹作品所坑害,故此总结 /******开始****** ...