洛谷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 ...
随机推荐
- Oracle字符函数length substr concat实例
--字符函数 --伪表dual --(1)求字符串长度 select length('123.456/-*') from dual --(2)截取函数求字符串的子串 ,) from dual --(3 ...
- 查看端口占用cmd命令
查看端口被占用的进程: 在任务管理器中结束进程:
- Laravel 5.6 模型关联 user 表后查询 user 表数据只能获取第一条数据,不知道怎么获取第二条
按照开发手册的说法,肯定是指令不够全,附代码图 如果, tests 是文章表, users 是用户表 test.com/tests/1 是 id 为 1 的文章地址( get 访问) 假如 Tests ...
- 虚拟机安装CentOS7之后没有ip的问题
CentOS 7 默认是不启动网卡的(ONBOOT=no),主要是修改一下网上配置,然后重起便可,看这篇博客操作: https://blog.csdn.net/dancheren/article/de ...
- python 钉钉机器人发送消息
import json import requests def sendmessage(message): url = 'https://oapi.dingtalk.com/robot/send?ac ...
- mysql将视图数据迁移到表中
#字段必须完全一样 INSERT into table1(所有字段) select * from data.视图
- nginx反向代理(动静分离)
使用反向代理(动静分离)可以让nginx专注静态内容,把动态请求交给apache来处理,发挥各自的优势,而且整个架构更加清晰: 这里假设你已经搭建好了nginx环境; 为了简单起见,就不用源码编译安装 ...
- ADO.NET工具类(二)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...
- Vue-router的API详解
前面的话 本文将详细介绍Vue-router的API router-link <router-link> 组件支持用户在具有路由功能的应用中点击导航. 通过 to 属性指定目标地址,默认渲 ...
- Razor Pages with ASP.NET Core 2
With ASP.NET Core 2 we get another way of building web applications. It’s one of those new things th ...