https://www.luogu.com.cn/problem/P3674

首先肯定是莫队
然后考虑如何判断,发现差可以直接用bitset
加法就整个数反过来(相当于取补集),然后再bitset
乘积随便搞
啊讲不清
看这篇吧
https://www.luogu.com.cn/blog/juruoforever/solution-p3674
code:

#include<bits/stdc++.h>
#define N 100005
using namespace std;
struct Q {int opt, x, l, r, id;
} q[N];
int bel[N], a[N], n, m, k, cnt[N * 3], ans[N];
bitset<N> s1, s2;
int cmp(Q x, Q y) {if(bel[x.l] != bel[y.l]) return x.l < y.l;if(bel[x.l] & 1) return x.r < y.r;return x.r > y.r;
}
void add(int id) {s1[a[id]] = s2[100000 - a[id]] = ++ cnt[a[id]] != 0;
}
void del(int id) {s1[a[id]] = s2[100000 - a[id]] = -- cnt[a[id]] != 0;
}
int main() {scanf("%d%d", &n, &m);for(int i = 1; i <= n; i ++) scanf("%d", &a[i]);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;int blo = max(1.0, n / sqrt(m));for(int i = 1; i <= n; i ++) bel[i] = (i - 1) / blo + 1;sort(q + 1, q + 1 + m, cmp);int l = 1, r = 0;for(int i = 1; i <= m; i ++) {while(r < q[i].r) add(++ r);while(l > q[i].l) add(-- l);while(r > q[i].r) del(r --);while(l < q[i].l) del(l ++);if(q[i].opt == 1) ans[q[i].id] = (s1&(s1 << q[i].x)).any();else if(q[i].opt == 2) ans[q[i].id] = (s1&(s2 >> (100000 - q[i].x))).any();else {for(int d = 1; d * d <= q[i].x; d ++) if(q[i].x % d == 0) {if(s1[d] && s1[q[i].x / d]) {ans[q[i].id] = 1;break;}}}}for(int i = 1; i <= m; i ++) if(ans[i]) printf("hana\n");else printf("bi\n");return 0;
}

正难则反
这不是基本套路嘛?
做什么都应该这么想啊

luogu P3674 小清新人渣的本愿相关推荐

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

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

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

    题目链接: P3674 小清新人渣的本愿 大致题意 给定一个长度为 n n n的序列, 有 m m m次询问操作. 1 l r x 表示询问 [ l , r ] [l, r] [l,r]是否存在 a ...

  3. 洛谷 P3674 小清新人渣的本愿 bitset+莫队

    题目: https://www.luogu.org/problemnew/show/P3674 题目大意: 给你一个长度为 N N N的序列,每次询问[l,r]能不能取出两个数,和或差或积等于C&qu ...

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

    给你一个序列a,长度为n,有m次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ,这三个操作分别 ...

  5. [Luogu 3674] 小清新人渣的本愿

    题目描述: 雾 题目分析: 介绍一种很牛的东西 bitset 相减出x只需要查询(a&(a< < x)).any()即可 +法 维护一个反的bitset即可 乘法枚举因数即可 O( ...

  6. [洛谷P3674]小清新人渣的本愿

    题目传送门 这道题是一道莫队题.对于每一种问法,就是查询对应的数是否在当前的区间内. 设$b[i]$表示莫队当前区间中有没有$i$这个数. 对于第一问"是否可以选出两个数它们的差为x&quo ...

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

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

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

    我们利用一个长度为 1e5 的 bitset,当数值 c 出现时,将 c 位置赋值为 1,对于题目要求的操作可以转变为 求 bitset 中存在两个位置相差为 x 的 1 这个比较难,如下图 bits ...

  9. 小清新人渣的本愿(莫队+bitset)

    小清新人渣的本愿 这两天写了些 b i t s e t bitset bitset的题,但都不想写题解...正巧这道题还结合了莫队,也是正在学习的,就记录一下吧. 题意: 给定一个 a a a数组,有 ...

最新文章

  1. VMware vSphere四种迁移类型的区别与适应场景
  2. MySQL里的wait_timeout
  3. 分类mysql_MySql分类
  4. VTK:绘图之SurfacePlot
  5. perl xml dom中文乱码问题解决
  6. linux-tar压缩与解压缩
  7. 牛顿法与拟牛顿法学习笔记
  8. 专利翻译常用计算机词汇,基于NP树的英文专利文献术语自动翻译技术研究-计算机应用技术专业论文.docx...
  9. Android Studio 使用socks代理
  10. python基础编程语法-Python基础语法介绍:面向对象编程(上)
  11. python debug run 结果不同_Python:PyCharm中运行与调试模式下的不同行为
  12. 【转】容器 C++ set和map
  13. git 版本控制~ 文件没有绿色和红色图标
  14. 07-SNAP处理Sentinel-1 IW GRD数据
  15. ARM学习day6-->看门狗定时器
  16. 设置密保问题,问题不重复设置
  17. 组建计算机网络通常采用3种模式,对等网的组建_计算机中的543原则_计算机网络工作模式(2)...
  18. C语言:指针三(线性表的存储结构)
  19. Arista创始人以VMware NSX的“开放框架”为目标瞄准思科
  20. 15数字华容道解法 图解_数字华容道解法图解 数字华容道玩法介绍

热门文章

  1. .vmx 是由VMware产品创建,但该产品与此版 VMware workstation 不兼容,因此无法使用(VMware版本不兼容问题)
  2. 霍尔闭环电流传感器在电动观光旅游车上的应用-安科瑞黄安南
  3. 绝世---都是东风在捉弄
  4. LibreOJ #2759 蜜袋鼯(フクロモモンガ) 题解
  5. 为了注册一个当前可注册的最短的QQ英文账号邮箱,我做了什么?(2020.08.20编写,今天才发现文章没有发出来,一直在草稿箱)
  6. java中单引号和双引号有什么区别?
  7. 怎样变成一个内心强大的人
  8. vue是用a标签打开新页面_vue | 路由vue-router在新窗口打开页面
  9. pytorch中contiguous()
  10. python如何赚外快 淘宝_业余时间怎么赚外快?用Python赚钱的5个方法!