洛谷P3674 小清新人渣的本愿
题意:多次询问,区间内是否存在两个数,使得它们的和为x,差为x,积为x。
n,m,V <= 100000
解:
毒瘤bitset......
假如我们有询问区间的一个桶,那么我们就可以做到O(n)枚举查找了。
然后我们用bitset优化一下......外面套上莫队来维护桶。
具体来说,差为x可以写成 a - b = x
然后我们把bitset左移/右移x位,与原来的and一下,看是否有元素为1即可。
和为x可以写成 a + b = x N - a - b = N - x (N - a) - b = N - x
这启示我们维护一个N - x的反桶,然后把反桶右移N - x位与原桶and。
关于积,直接n0.5暴力即可。
#include <cstdio>
#include <bitset>
#include <cmath>
#include <algorithm> const int N = ; int fr[N], a[N], bin[N];
std::bitset<N> bs, bs2, tp; struct ASK {
int f, l, r, x, t, ans;
inline bool operator <(const ASK &w) const {
if(fr[l] != fr[w.l]) {
return l < w.l;
}
return r < w.r;
}
}ask[N]; inline bool cmp(const ASK &A, const ASK &B) {
return A.t < B.t;
} inline void add(int x) {
if(!bin[a[x]]) {
bs.set(a[x]);
bs2.set(N - a[x]);
}
bin[a[x]]++;
return;
} inline void del(int x) {
bin[a[x]]--;
if(!bin[a[x]]) {
bs.reset(a[x]);
bs2.reset(N - a[x]);
}
return;
} int main() {
int n, m;
scanf("%d%d", &n, &m);
int T = sqrt(n);
for(int i = ; i <= n; i++) {
scanf("%d", &a[i]);
fr[i] = (i - ) / T + ;
}
for(int i = ; i <= m; i++) {
scanf("%d%d%d%d", &ask[i].f, &ask[i].l, &ask[i].r, &ask[i].x);
ask[i].t = i;
}
std::sort(ask + , ask + m + ); int l = , r = ;
bin[a[]]++;
bs.set(a[]);
bs2.set(N - a[]);
for(int i = ; i <= m; i++) {
while(l > ask[i].l) {
add(--l);
}
while(r < ask[i].r) {
add(++r);
}
while(l < ask[i].l) {
del(l++);
}
while(r > ask[i].r) {
del(r--);
}
// ------------
if(ask[i].f == ) {
tp = bs & (bs >> ask[i].x);
ask[i].ans = tp.any();
}
else if(ask[i].f == ) {
tp = bs & (bs2 >> (N - ask[i].x));
ask[i].ans = tp.any();
}
else {
bool fd = ;
for(int j = ; j * j <= ask[i].x; j++) {
if(ask[i].x % j) {
continue;
}
if(bs[j] && bs[ask[i].x / j]) {
ask[i].ans = ;
break;
}
}
}
} std::sort(ask + , ask + m + , cmp);
for(int i = ; i <= m; i++) {
if(ask[i].ans) {
puts("hana");
}
else {
puts("bi");
}
}
return ;
}
AC代码
洛谷P3674 小清新人渣的本愿的更多相关文章
- 洛谷 P3674 小清新人渣的本愿 [莫队 bitset]
传送门 题意: 给你一个序列a,长度为n,有Q次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ...
- 洛谷P3674 小清新人渣的本愿(莫队)
传送门 由乃tql…… 然后抄了一波zcy大佬的题解 我们考虑把询问给离线,用莫队做 然后用bitset维护,每一位代表每一个数字是否存在,记为$now1$ 然后再记录一个$now1$的反串$now2 ...
- 洛谷 P3674 小清新人渣的本愿
想看题目的戳我. 我刚开始觉得这道题目好难. 直到我从Awson大佬那儿了解到有一个叫做bitset的STL,这道题目就很容易被解开了. 想知道这个神奇的bitset的戳我. 这个题目一看就感觉是莫队 ...
- P3674 小清新人渣的本愿
P3674 小清新人渣的本愿 一道妙不可言的题啊,,, 一看就知道是个莫队 考虑求答案 1号操作就是个大bitset,动态维护当前的bitset \(S\),把能取哪些值都搞出来,只要\(S\ and ...
- 【题解】Luogu P3674 小清新人渣的本愿
原题传送门 这题还算简单(我记得我刚学oi时就来写这题,然后暴力都爆零了) 看见无修改,那么这题应该是莫队 维护两个bitset,第二个是第一个的反串,bitset内维护每个数字是否出现过 第一种操作 ...
- luogu P3674 小清新人渣的本愿
传送门 毒瘤lxl 本质是莫队,关键是怎么处理询问 这里需要开两个bitset(记为\(b1,b2\)),分别存\(x\)和\(n-x\)是否出现 对于询问1,即\(x-y=z\),由于\(y=x-z ...
- luogu P3674 小清新人渣的本愿(莫队+bitset)
这题是莫队维护bitset. 然而我并不会bitset以前讲过认为不考就没学 我真的太菜了. 首先维护一个权值的bitset--s. 操作3比较简单,我们可以\(\sqrt{x}\)枚举约数然后判断就 ...
- P3674 小清新人渣的本愿 莫队+bitset
ennmm...bitset能过系列. 莫队+bitset \(\mathcal{O}(m\sqrt n + \frac{nm}{w})\) 维护一个正向的 bitset <N> mem ...
- 【洛谷3674】小清新人渣的本愿(莫队,bitset)
[洛谷3674]小清新人渣的本愿(莫队,bitset) 题面 洛谷,自己去看去,太长了 题解 很显然的莫队. 但是怎么查询那几个询问. 对于询问乘积,显然可以暴力枚举因数(反正加起来也是\(O(n\s ...
随机推荐
- Linux安装jdk环境
前言: 又重新起了一个CentOS7,里面什么都没有,翻出以前CentOS7安装jdk的笔记,现在已经弃用有道云了,用博客比较多,所以把它移过来. 有道云笔记地址(CentOS7安装1.8jdk):h ...
- for 循环增强
package cn.zhou.com; /* * 增强for循环 * * for(int i:arr) * { * System.out.print(i+1+" "); * } ...
- js4
数组的解构赋值: 位置对象的解构赋值: 名称 // {}在解构赋值的时候,不能出现在一行的最前面,否则js解析器会把他当成一个代码块,加()({a, b} = obj),告诉他这个仅仅是一个解构语句 ...
- 学习 Spring (十七) Spring 对 AspectJ 的支持 (完结)
Spring入门篇 学习笔记 @AspectJ 的风格类似纯 java 注解的普通 java 类 Spring 可以使用 AspectJ 来做切入点解析 AOP 的运行时仍旧是纯的 Spring AO ...
- poj-2406(kmp水题)
题意:定义一个a*b=字符串a连接字符串b:给你一个字符串s,问你这个字符串最多能用多少个字符串t连接得到:例如:aaaa=4个a构成: 解题思路:kmp水题,next数组除了查找字串以外最广泛的一种 ...
- 搭建Hexo博客(三)—换电脑继续写Hexo博客
Hexo和GitHub搭建博客的原理是:Hexo将source下的md文件生成静态的html页面,存放到public目录中,这一步是由命令:hexo -g完成.接下来执行hexo -d命令,就将pub ...
- 添加一个Android框架层的系统服务与实现服务的回调
2017-10-09 概述 所谓Android系统服务其本质就是一个通过AIDL跨进程通信的小Demo的延伸而已.按照 AIDL 跨进程通信的标准创建一套程序,将服务端通过系统进程来运行实现永驻内存, ...
- P1035 调和级数
两种解法如下: 1.模拟 这种做法的思路是枚举n从1开始,直到Sn>k结束,只需要一个循环即可实现. 代码: #include<cstdio> int main() { ; scan ...
- 大学jsp实验3include指令的使用
1.include指令的使用 (1)编写一个名为includeCopyRight.jsp的页面,页面的浏览效果如下: 要求“2016”这个值可以实现动态更新.请写出页面代码: <%@ page ...
- 【BZOJ3625】【CF438E】小朋友和二叉树 NTT 生成函数 多项式开根 多项式求逆
题目大意 考虑一个含有\(n\)个互异正整数的序列\(c_1,c_2,\ldots ,c_n\).如果一棵带点权的有根二叉树满足其所有顶点的权值都在集合\(\{c_1,c_2,\ldots ,c_n\ ...