LuoguP3674 小清新人渣的本愿 BZOJ4810: [Ynoi2017]由乃的玉米田
题目地址
小清新人渣的本愿
[Ynoi2017]由乃的玉米田
所以这两题也就输出不一样而已
题解
这种lxl的题还是没修改操作的题基本就是莫队
分开考虑每个询问
1.减法
\(a-b=x⇒a=b+x\)
用一个\(bitset\),第\(i\)位表示有没有\(i\)这个数
那么查询其实就等价于查询bit&(bit>>x)之后里面有没有1
\(a+b=x\)
2.加法
\(a+b=x\)
设\(p=n-b\)
\(a-p=a-n+b=x-n\)
维护一下另外一个\(bitset\),里面存的是\(n-i\)有没有出现过
查询直接查bit1&(bit2>>(n-x))里面有没有1就好
3.乘法
乘法不好维护
但是直接枚举因数也是可以的,在第一个bitset里面看成对的因数有没有出现过就好
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <bitset>
using namespace std;inline int read() {int x = 0, f = 1; char c = getchar();while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}while(c >= '0' && c <= '9') {x = x * 10 + c - '0'; c = getchar();}return x * f;
}#define N 100010bitset<N>s1;
bitset<N>s2;
int cnt[N];
int n, m, a[N];
int ans[N], block;
struct ques {int opt, l, r, x, id;
} q[N];bool cmp(ques a, ques b) {if(a.l / block == b.l / block) return a.r < b.r;else return a.l < b.l;
}void add(int x) {x = a[x];cnt[x]++;if(cnt[x] == 1) s1[x] = s2[n - x] = true;
}void dele(int x) {x = a[x];cnt[x]--;if(!cnt[x]) s1[x] = s2[n - x] = false;
}int main() {n = read(); m = read();for(int i = 1; i <= n; i ++) a[i] = read();block = n / sqrt(m);for(int i = 1; i <= m; i ++) {q[i] = (ques) {read(), read(), read(), read(), i};}sort(q + 1, q + m + 1, cmp);int l = 1, r = 0;for(int i = 1; i <= m; i ++) {int ql = q[i].l, qr = q[i].r, opt = q[i].opt, x = q[i].x;while(l < ql) dele(l++);while(l > ql) add(--l);while(r < qr) add(++r);while(r > qr) dele(r--);if(opt == 1) {ans[q[i].id] = (s1 & (s1 >> x)).any();}if(opt == 2) {ans[q[i].id] = (s1 & (s2 >> (n - x))).any();}if(opt == 3) {for(int k = 1; k * k <= x; k ++) {if(x % k == 0) {if(s1[k] && s1[x / k]) {ans[q[i].id] = 1;break;}}}}}for(int i = 1; i <= m; i ++) {puts(ans[i] ? "hana" : "bi");}return 0;
}
转载于:https://www.cnblogs.com/henry-1202/p/10201959.html
LuoguP3674 小清新人渣的本愿 BZOJ4810: [Ynoi2017]由乃的玉米田相关推荐
- [luoguP3674]小清新人渣的本愿
题目大意 询问区间是否存在两个数和为x/差为x/积为x 这两个数可以使同一个数 bitset 不会bitset的蒟蒻哭了 维护bitset加和减就随便做了. 积就枚举较小数 上个莫队算法来维护我们需要 ...
- P3674 小清新人渣的本愿 (莫队 + bitset)
题目链接: P3674 小清新人渣的本愿 大致题意 给定一个长度为 n n n的序列, 有 m m m次询问操作. 1 l r x 表示询问 [ l , r ] [l, r] [l,r]是否存在 a ...
- 小清新人渣的本愿(莫队+bitset)
小清新人渣的本愿 这两天写了些 b i t s e t bitset bitset的题,但都不想写题解...正巧这道题还结合了莫队,也是正在学习的,就记录一下吧. 题意: 给定一个 a a a数组,有 ...
- 洛谷-小清新人渣的本愿-(莫队+bitset)
小清新人渣的本愿 题意: 就是给你一个数组,然后有3种查询,分别是问你l到r区间内,是否有两个数的差等于x,只和等于x,乘积为x. 思考: 其实看到,感觉就挺复杂的,没办法去找这种关系对,除了乘积为x ...
- 【luogu P3674】 小清新人渣的本愿
题目 题目背景 本题时限3s,空间128MB 我感觉我要挂省选 人渣的本愿是一个有趣的番 可爱的花火喜欢从小和她谈♂笑♂风♂生的欧♂尼♂酱鸣海,欧尼酱特别想当老师,然后剧本安排当了花火的班主任. 然而 ...
- P3674 小清新人渣的本愿 (bitset+莫队)
给你一个序列a,长度为n,有m次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ,这三个操作分别 ...
- 【题解】Luogu P3674 小清新人渣的本愿
原题传送门 这题还算简单(我记得我刚学oi时就来写这题,然后暴力都爆零了) 看见无修改,那么这题应该是莫队 维护两个bitset,第二个是第一个的反串,bitset内维护每个数字是否出现过 第一种操作 ...
- [洛谷P3674]小清新人渣的本愿
题目传送门 这道题是一道莫队题.对于每一种问法,就是查询对应的数是否在当前的区间内. 设$b[i]$表示莫队当前区间中有没有$i$这个数. 对于第一问"是否可以选出两个数它们的差为x&quo ...
- [Luogu 3674] 小清新人渣的本愿
题目描述: 雾 题目分析: 介绍一种很牛的东西 bitset 相减出x只需要查询(a&(a< < x)).any()即可 +法 维护一个反的bitset即可 乘法枚举因数即可 O( ...
- 【洛谷 P3674】 小清新人渣的本愿(bitset,莫队)
题目链接 因为每个数都是\(10^5\)以内,考虑直接用\(bitset\)维护. \(a-b=x\),其实就是看是否有\(p\)和\(p+x\)同时存在,直接\(bitset\)移位按位与一下就好了 ...
最新文章
- 推荐 15 款常用开发工具
- 更改c语言程序保存地址吗,C语言文本文件实现局部修改
- SystemCenter2012SP1实践(23)私有云的权限设计
- AUTOSAR从入门到精通100讲(十四)-一文详解CAN总线错误帧
- JAVA----数组(一)
- ArcGIS for Android Runtime100 基本操作(四)——GPS定位
- 基于FreeMarker+aspose的Word模板制作及打印
- Python自动化之操作PPT--更新模板数据,减少重复操作
- Transformer 真的很全能!谷歌用协同训练策略实现多个SOTA,单一ViT模型执行多模态多任务...
- Android文字转语音播报
- C# 生成word文件 小学一年级口算题生成器(代码)
- 梁宁:增长思维30讲脑图笔记
- 计算机中存储器的最小单位是什么意思,计算机内存储器的最小存储单位是什么...
- 第三方SDK接入--微信
- 基于计算机视觉的无人驾驶感知系统
- shapefile文件(shp)读取
- 计步器判断运动状态2
- 【数据挖掘】-模型的评估(四)
- 复旦大学演讲刷屏:我用尽了毕生的力气,只是抵达了生活的平凡
- Unity Shader 玻璃效果
热门文章
- 转载:cisco voip转码设置
- 电大计算机阅读英语作文,(2017年电大)电大英语作文整理20篇.doc
- 6.MongoDB之索引
- pcb天线设计和hfss仿真分析实例_5G天线与多天线系统设计
- oracle数据库考试答题,Oracle数据库试题
- 广度搜索 -- 9.2 Word Ladder -- 求具体的路径 -- 图解
- 三 Hibernate持久化状态主键生成策略
- windows中mysql5.7中配置中文字符集和默认datadir
- [转]vs2003,安装程序检测到另一个程序要求计算机重新启动
- 在VC中如何将float型转换成字符数组