题意:多次询问,区间内是否存在两个数,使得它们的和为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 小清新人渣的本愿的更多相关文章

  1. 洛谷 P3674 小清新人渣的本愿 [莫队 bitset]

    传送门 题意: 给你一个序列a,长度为n,有Q次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ...

  2. 洛谷P3674 小清新人渣的本愿(莫队)

    传送门 由乃tql…… 然后抄了一波zcy大佬的题解 我们考虑把询问给离线,用莫队做 然后用bitset维护,每一位代表每一个数字是否存在,记为$now1$ 然后再记录一个$now1$的反串$now2 ...

  3. 洛谷 P3674 小清新人渣的本愿

    想看题目的戳我. 我刚开始觉得这道题目好难. 直到我从Awson大佬那儿了解到有一个叫做bitset的STL,这道题目就很容易被解开了. 想知道这个神奇的bitset的戳我. 这个题目一看就感觉是莫队 ...

  4. P3674 小清新人渣的本愿

    P3674 小清新人渣的本愿 一道妙不可言的题啊,,, 一看就知道是个莫队 考虑求答案 1号操作就是个大bitset,动态维护当前的bitset \(S\),把能取哪些值都搞出来,只要\(S\ and ...

  5. 【题解】Luogu P3674 小清新人渣的本愿

    原题传送门 这题还算简单(我记得我刚学oi时就来写这题,然后暴力都爆零了) 看见无修改,那么这题应该是莫队 维护两个bitset,第二个是第一个的反串,bitset内维护每个数字是否出现过 第一种操作 ...

  6. luogu P3674 小清新人渣的本愿

    传送门 毒瘤lxl 本质是莫队,关键是怎么处理询问 这里需要开两个bitset(记为\(b1,b2\)),分别存\(x\)和\(n-x\)是否出现 对于询问1,即\(x-y=z\),由于\(y=x-z ...

  7. luogu P3674 小清新人渣的本愿(莫队+bitset)

    这题是莫队维护bitset. 然而我并不会bitset以前讲过认为不考就没学 我真的太菜了. 首先维护一个权值的bitset--s. 操作3比较简单,我们可以\(\sqrt{x}\)枚举约数然后判断就 ...

  8. P3674 小清新人渣的本愿 莫队+bitset

    ennmm...bitset能过系列. 莫队+bitset \(\mathcal{O}(m\sqrt n + \frac{nm}{w})\) 维护一个正向的 bitset <N> mem ...

  9. 【洛谷3674】小清新人渣的本愿(莫队,bitset)

    [洛谷3674]小清新人渣的本愿(莫队,bitset) 题面 洛谷,自己去看去,太长了 题解 很显然的莫队. 但是怎么查询那几个询问. 对于询问乘积,显然可以暴力枚举因数(反正加起来也是\(O(n\s ...

随机推荐

  1. PhpStorm 头部注释、类注释和函数注释的设置

    *设置位置:"Settings"->"file templates"; 如下图,设置头部注释.类注释以及函数注释,时间.用户名.文件名称等随机改变的属性, ...

  2. java从request中获取GET和POST请求参数

    URL和参数列表 一 获取请求方式 request.getMethod(); get和post都可用, 二 获取请求类型 request.getContentType(); get和post都可用,示 ...

  3. ubuntu18.04 安装 php7.2

    sudo apt-get install software-properties-common python-software-properties sudo add-apt-repository p ...

  4. 在windows 7 和linux上安装xlwt和xlrd

    在windows 7上安装xlwt xlrd xlwt是开源社区编写的python库,需要单独安装,下载地址https://pypi.python.org/pypi/xlwt 目前xlwt最新的版本是 ...

  5. ArcGIS 中UniqueValueRenderer和SimpleRenderer的异同点

    唯一值渲染器:UniqueValueRenderer用符号表示一组有匹配属性的图形,这通常用于名词或字符串数据.SimpleRenderer是使用单一符号进行着色分类,不涉及对要素的数据进行处理.这种 ...

  6. Newton方法

    Newton方法主要解决无等式约束和等式约束的最优化方法. 1.函数进行二阶泰勒展开近似 Taylor近似函数求导等于0进而得到Newton步径.(搜索方向) 2.Newton减量(停止条件) 当1/ ...

  7. 当考虑到并发问题时候,我们需要将给表插入id的代码挪到service中,目的是将其放到一个事务中,保准事务的一致性

  8. Nginx stream如何获取ssl信息并反向代理至上游服务器

    L:116

  9. Minimum number of steps CodeForces - 805D(签到题)

    D. Minimum number of steps time limit per test 1 second memory limit per test 256 megabytes input st ...

  10. 【XSY2785】模型

    题目描述 给你一棵\(n\)个点的树,让你加最少的边,使得图中没有割点. 要求输出方案. \(n\leq 500000\) 题解 把叶子的权值设为\(1\),其他点设为\(0\),找出带权重心. 以重 ...