BZOJ4810: [Ynoi2017]由乃的玉米田
【传送门:BZOJ4810】
简要题意:
给出n个数,给出m种询问:
1 l r x判断是否在区间l到r中能选出两个数的差为x
2 l r x判断是否在区间l到r中能选出两个数的和为x
3 l r x判断是否在区间l到r中能选出两个数的乘积为x
其中选出的两个数可以相等
题解:
肯定得离线
用莫队吧(离线,第一时间就想到莫队)
第三个询问可以暴力求因子搞一搞
结果发现不会搞1和2
上网搜了搜,学了一波bitset
bitset简单来说可以当作一个二进制位来用,但是它并不需要二进制那样的庞大数据范围
而且赋值只需要像数组一样赋值
然后对于第1个操作,将当前bitset与当前的bitset向右移x位之后的bitset做一下and运算,假如有1,则说明成立
然后对于第2个操作,将用第二个bitset作为第一个bitset的取反,然后用反转bitset右移后和正bitset做一下and运算,如果有1,则说明成立(这个东西,自己脑补,也挺容易理解的)
参考代码:
#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<cstdlib> #include<bitset> using namespace std; bitset<110000> bs1,bs2; int a[110000]; int belong[110000]; struct node {int opt,l,r,x,d,id; }q[1100000];int n,m; bool cmp1(node n1,node n2) {if(belong[n1.l]<belong[n2.l]) return true;if(belong[n1.l]>belong[n2.l]) return false;if(belong[n1.l]==belong[n2.l]){if(n1.r<n2.r) return true;if(n1.r>n2.r) return false;}return false; } bool cmp2(node n1,node n2) {return n1.id<n2.id; } int sum[110000]; void add(int x) {sum[x]++;if(sum[x]==1) bs1[x]=1,bs2[n-x+1]=1; } void del(int x) {sum[x]--;if(sum[x]==0) bs1[x]=0,bs2[n-x+1]=0; } int solve1(int x) {if(((bs1)&(bs1>>x)).any()==true) return 1;else return 0; } int solve2(int x) {if(((bs1)&(bs2>>(n-x+1))).any()==true) return 1;else return 0; } int solve3(int x) {int t=int(sqrt(x+1));for(int i=1;i<=t;i++) if(x%i==0&&bs1[i]==1&&bs1[x/i]==1) return 1;return 0; } int main() {scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%d",&a[i]);int block=int(sqrt(n));for(int i=1;i<=n;i++){int t=(i-1)/block+1;belong[i]=t;}for(int i=1;i<=m;i++){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,cmp1);int l=1,r=0;memset(sum,0,sizeof(sum));bs1.reset();bs2.reset();for(int i=1;i<=m;i++){while(l>q[i].l){l--;add(a[l]);}while(l<q[i].l){del(a[l]);l++;}while(r>q[i].r){del(a[r]);r--;}while(r<q[i].r){r++;add(a[r]);}if(q[i].opt==1) q[i].d=solve1(q[i].x);if(q[i].opt==2) q[i].d=solve2(q[i].x);if(q[i].opt==3) q[i].d=solve3(q[i].x);}sort(q+1,q+m+1,cmp2);for(int i=1;i<=m;i++) if(q[i].d==1) printf("yuno\n"); else printf("yumi\n");return 0; }
转载于:https://www.cnblogs.com/Never-mind/p/8551984.html
BZOJ4810: [Ynoi2017]由乃的玉米田相关推荐
- BZOJ4810:[YNOI2017]由乃的玉米田(莫队,bitset)
Description 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐. 由乃认为玉米田不美,所以她决定出个数据结构题 这个题是这样的: 给你一个序 ...
- BZOJ4810 [Ynoi2017]由乃的玉米田
对每个区间维护一下这个区间每个数有没有,用bitset压一下,这个用莫队跑出来,然后就能判加减合不合法了 乘的话根号枚举一下就行了 #include<iostream> #include& ...
- 4810: [Ynoi2017]由乃的玉米田
4810: [Ynoi2017]由乃的玉米田 Time Limit: 30 Sec Memory Limit: 256 MB Submit: 464 Solved: 222 [Submit][St ...
- BZOJ - 4810 [Ynoi2017]由乃的玉米田 莫队算法 + bitset 大暴力
大家都很强, 可与之共勉 . 4810: [Ynoi2017]由乃的玉米田 Time Limit: 30 Sec Memory Limit: 256 MB Description 由乃在自己的农田边散 ...
- BZOJ 4810 [Ynoi2017]由乃的玉米田(莫队+bitset)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4810 [题目大意] 给出一个数列,有三种区间查询, 分别查询区间是否存在两个数乘积为x ...
- BZOJ 4810 [Ynoi2017]由乃的玉米田 ——Bitset 莫队算法
加法和减法的操作都能想到Bitset. 然后发现乘法比较难办,反正复杂度已经是$O(n\log{n})$了 枚举因数也不能更差了,直接枚举就好了. #include <map> #incl ...
- 洛谷 P1825 [USACO11OPEN]玉米田迷宫Corn Maze
题目描述 去年秋天,奶牛们去参观了一个玉米迷宫,迷宫里有一些传送装置,可以将奶牛从一点到另一点进行瞬间转移.这些装置可以双向使用:一头奶牛可以从这个装置的起点立即到此装置的终点,同时也可以从终点出发, ...
- 状压dp之二之三 炮兵阵地/玉米田 By cellur925
一.简单的状压dp 玉米田 题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ ...
- acwing 327. 玉米田
327. 玉米田 题意: m * n的土地,有的土地不育,有的可以种植,要求相邻的土地不能同时种植玉米,问有多少种种植方式 题解: 状压dp,先存每一行可能的状态,然后状态转移,注意相邻不能同时种植除 ...
最新文章
- go 方法接受者 是指针类型和非指针类型的 区别
- 从Wiesloch火车站到SAP Walldorf总部的交通方式
- plsql轻量版触发器
- dropbox离线安装版下载方法
- java spring获取bean_普通Java类获取Spring的Bean的方法
- 1064. Complete Binary Search Tree
- 图论复习(二)-——哈密顿图及其应用
- swift 选取图库中的图片
- 微信SDK删除支付模块流程
- 回顾展望:杀毒软件的“前世今生”
- Censored! :ac自动机 + DP
- Docker从入门到放弃
- Photoshop + ExifToolGUI 完美复制照片信息
- 彻底弄懂@Controller 、@Service、@Component
- 输入一行英文句子,统计其中的单词个数。例如,输入”How are you.”,则输出3。
- PL/SQL程序基础2
- 不要自己默默加班了!争取领导支援的五大实战话术
- 【已解决】HHC6003: 错误: 文件 Itircl.dll 没有被正确注册。怎么办?
- 如何搞垮一个测试团队?
- 忆阻器的概念和实现原理
热门文章
- MIT+IBM同时利用AI探索神经科学,让脑科学研究如虎添翼
- 系统学习机器学习之监督学习
- maya为什么不能导出fbx_Maya无法展 UV的解决办法
- mysql55w.x86 64 卸载_Cent6.5 64位yum安装mysql5.5
- linux sublime 输入中文,Linux中Sublime Text无法输入中文怎么办
- ueditor版本python3_GitHub - crazyinstall/DjangoUeditor3: Django Ueditor 兼容Python3改进,Python2上也可用...
- java websocket 库_Java 项目中的 WebSocket 实现
- 关于mysql和oracle错误的有_关于MySQL与Oracle的区别
- 手机算通用计算机还是,电脑手机通用的便签是哪个?有人知道吗
- python列表生成字典_Python 列表生成式 字典生成式