加法和减法的操作都能想到Bitset。

然后发现乘法比较难办,反正复杂度已经是$O(n\log{n})$了

枚举因数也不能更差了,直接枚举就好了。

#include <map>
#include <ctime>
#include <cmath>
#include <queue>
#include <bitset>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define maxn 100005bitset <100010> a,b;int T,tot,L[maxn],R[maxn],n,m,c[maxn],bel[maxn];struct Query{int l,r,opt,x,id;bool operator < (const Query & a)const {return bel[l]==bel[a.l]?r<a.r:bel[l]<bel[a.l];}
}q[maxn];void init()
{T=sqrt(n);for(int i=1;i<=n;i+=T)L[++tot]=i,R[tot]=i+T-1;R[tot]=n;F(i,1,tot) F(j,L[i],R[i]) bel[j]=i;
}int cnt[maxn],ans[maxn];void add(int x)
{cnt[x]++;if(cnt[x]==1)a[x]=1,b[maxn-x]=1;}void dec(int x)
{cnt[x]--;if (!cnt[x]) a[x]=0,b[maxn-x]=0;}bool Cha(int x)
{if (((a>>x)&a).count()) return true;return false;
}bool He(int x)
{if (((b>>(maxn-x))&a).count()) return true;return false;
}bool Mul(int x)
{int lim=sqrt(x+1);F(i,1,lim)if(!(x%i))if (a[i]&&a[x/i]) return true;return false;
}int main()
{scanf("%d%d",&n,&m);init();F(i,1,n) scanf("%d",&c[i]);F(i,1,m){scanf("%d%d%d%d",&q[i].opt,&q[i].l,&q[i].r,&q[i].x);q[i].id=i;}sort(q+1,q+m+1);int l=1,r=0;F(i,1,m){while (r<=q[i].r) add(c[++r]);while (r>q[i].r) dec(c[r--]);while (l<=q[i].l) dec(c[l++]);while (l>q[i].l) add(c[--l]);switch(q[i].opt){case 1: if (Cha(q[i].x)) ans[q[i].id]=1; break;case 2: if (He(q[i].x)) ans[q[i].id]=1; break;case 3: if (Mul(q[i].x)) ans[q[i].id]=1; break;}}F(i,1,m)if (ans[i]) printf("yuno\n");else printf("yumi\n");
}

  

转载于:https://www.cnblogs.com/SfailSth/p/6736908.html

BZOJ 4810 [Ynoi2017]由乃的玉米田 ——Bitset 莫队算法相关推荐

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

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

  2. BZOJ - 4810 [Ynoi2017]由乃的玉米田 莫队算法 + bitset 大暴力

    大家都很强, 可与之共勉 . 4810: [Ynoi2017]由乃的玉米田 Time Limit: 30 Sec Memory Limit: 256 MB Description 由乃在自己的农田边散 ...

  3. 4810: [Ynoi2017]由乃的玉米田

    4810: [Ynoi2017]由乃的玉米田 Time Limit: 30 Sec  Memory Limit: 256 MB Submit: 464  Solved: 222 [Submit][St ...

  4. P5355-[Ynoi2017]由乃的玉米田【莫队,bitset,根号分治】

    正题 题目链接:https://www.luogu.com.cn/problem/P5355 顺带一提的是P3674 小清新人渣的本愿是这题的弱化版,提交就可以A 题目大意 nnn个数字,询问 一个区 ...

  5. [bzoj 3594] [Scoi2014]方伯伯的玉米田

    [bzoj 3594] [Scoi2014]方伯伯的玉米田 Description 方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美. 这排玉米一共有N株,它们的高度参差不齐. 方伯伯认为 ...

  6. [bzoj 2038 OR 清橙A1206 小Z的袜子]莫队算法

    [bzoj 2038 OR 清橙A1206 小Z的袜子]莫队算法 题意描述:[清橙A1206 时限:1s] [bzoj 2038 时限:20s] 题意描述: 作为一个生活散漫的人,小Z每天早上都要耗费 ...

  7. bzoj 3594: [Scoi2014]方伯伯的玉米田

    3594: [Scoi2014]方伯伯的玉米田 Time Limit: 60 Sec  Memory Limit: 128 MB Submit: 1399  Solved: 627 [Submit][ ...

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

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

  9. BZOJ4810: [Ynoi2017]由乃的玉米田

    [传送门:BZOJ4810] 简要题意: 给出n个数,给出m种询问: 1 l r x判断是否在区间l到r中能选出两个数的差为x 2 l r x判断是否在区间l到r中能选出两个数的和为x 3 l r x ...

最新文章

  1. 【C++】【二】动态数组-Dynamic_linklist
  2. 重装windows2003遇到的老问题:0X0000007B和显卡驱动安装不上。
  3. web开发下的各种下载方法
  4. Winform中设置ZedGraph曲线图的水平与竖直参考线
  5. 电脑一复制粘贴就卡死_油门突然卡死,踩刹车根本没用该怎么办?看看老司机怎么说...
  6. 在Linux中的子进程是什么,什么父进程的东西在Linux中新创建的子进程中共享
  7. Xpath路径表达式
  8. JVM运行时内存概念-堆栈及新生代、老年代、持久代
  9. 在一行中捕获多个异常(块除外)
  10. Linux常用命令--uname
  11. 防火墙状态检测及会话表技术
  12. Illustrator 教程,如何在 Illustrator 中锁定、分组和隐藏内容?
  13. 编译OpenJDK8 b232版本
  14. yxr:Makefile 简单样本
  15. SQL select详解(基于选课系统)
  16. Muu云课堂V2v2.5.8
  17. 软件测试的分类有哪些?
  18. SAP S4 FI后台详细配置教程- PART4 (科目及税费相关配置篇)
  19. java绘图机器猫_简笔画教程:教你画机器猫
  20. 怎么将.tex文件转换成pdf

热门文章

  1. 自学python需要买书吗-Python入门到精通学习书籍推荐!
  2. python网上编程课程-少儿编程 为你解读Python编程课程
  3. python适合做后端开发吗-转行IT做后端开发,学python还是java?
  4. python编程入门p-Python编程_基础入门
  5. python3菜鸟教程中文-Python3菜鸟教程 1.介绍
  6. Markdwon中多张图片的并排显示(Mardown的灵动使用技巧)
  7. LeetCode 450 Delete Node in a BST(二叉搜索树中的删除结点)
  8. hdu2.1.2 How many prime numbers(计算素数的个数)
  9. python set()的用法
  10. Unity InvalidOperationException: out of sync错误