Description

题库链接

给你一个序列 \(A\) ,长度为 \(n\) ,有 \(m\) 次操作,每次询问一个区间是否可以

  1. 选出两个数它们的差为 \(x\) ;
  2. 选出两个数它们的和为 \(x\) ;
  3. 选出两个数它们的乘积为 \(x\) 。

\(1\leq n,m,A_i\leq 100000\)

Solution

前两个操作 \(bitset\) 可以解决;后一个操作直接暴力枚举因数单个询问 \(O(\sqrt n)\) 。复杂度承受得起。

Code

#include <bits/stdc++.h>
using namespace std;
const int N = 100005; int n, m, lim, A[N], cnt[N], ans[N];
bitset<(N<<1)>a, b, c;
struct tt {
int opt, l, r, x, id;
bool operator < (const tt &b) const {
return l/lim == b.l/lim ? r < b.r : l < b.l;
}
}p[N]; void moveout(int x) {
++cnt[A[x]]; if (cnt[A[x]] == 1) a[A[x]] = b[N+A[x]] = c[N-A[x]] = 1;
}
void movein(int x) {
--cnt[A[x]]; if (cnt[A[x]] == 0) a[A[x]] = b[N+A[x]] = c[N-A[x]] = 0;
}
void work() {
scanf("%d%d", &n, &m), lim = sqrt(n);
for (int i = 1; i <= n; i++) scanf("%d", &A[i]);
for (int i = 1; i <= m; i++)
scanf("%d%d%d%d", &p[i].opt, &p[i].l, &p[i].r, &p[i].x),
p[i].id = i;
sort(p+1, p+m+1);
int curl = 1, curr = 0;
for (int i = 1; i <= m; i++) {
int l = p[i].l, r = p[i].r, x = p[i].x;
while (curr < r) ++curr, moveout(curr);
while (curl > l) --curl, moveout(curl);
while (curr > r) movein(curr), --curr;
while (curl < l) movein(curl), ++curl;
if (p[i].opt == 1) if ((a&(a<<x)).any()) ans[p[i].id] = 1;
if (p[i].opt == 2) if ((b&(c<<x)).any()) ans[p[i].id] = 1;
if (p[i].opt == 3) {
int lim = sqrt(x);
for (int j = 1; j <= lim; j++)
if (x%j == 0 && cnt[j] && cnt[x/j]) {ans[p[i].id] = 1; break; }
}
}
for (int i = 1; i <= m; i++) puts(ans[i] ? "hana" : "bi");
}
int main() {work(); return 0; }

else

对于一个叫做 foobitset

  • foo.size() 返回大小(位数)
  • foo.count() 返回1的个数
  • foo.any() 返回是否有1
  • foo.none() 返回是否没有1
  • foo.set() 全都变成1
  • foo.set(p) 将第p + 1位变成1
  • foo.set(p, x) 将第p + 1位变成x
  • foo.reset() 全都变成0
  • foo.reset(p) 将第p + 1位变成0
  • foo.flip() 全都取反
  • foo.flip(p) 将第p + 1位取反
  • foo.to_ulong() 返回它转换为unsigned long的结果,如果超出范围则报错
  • foo.to_ullong() 返回它转换为unsigned long long的结果,如果超出范围则报错
  • foo.to_string() 返回它转换为string的结果

[Luogu 3674]小清新人渣的本愿的更多相关文章

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

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

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

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

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

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

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

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

  5. P3674 小清新人渣的本愿

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

  6. LuoguP3674 小清新人渣的本愿 && BZOJ4810: [Ynoi2017]由乃的玉米田

    题目地址 小清新人渣的本愿 [Ynoi2017]由乃的玉米田 所以这两题也就输出不一样而已 题解 这种lxl的题还是没修改操作的题基本就是莫队 分开考虑每个询问 1.减法 \(a-b=x⇒a=b+x\ ...

  7. [Luogu3674]小清新人渣的本愿

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

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

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

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

    对于加减,用bitset维护当前每个数有没有 对于乘,暴力枚举约数 然后莫队 复杂度$O(m(\sqrt{n}+\frac{c}{64}))$ #include<bits/stdc++.h> ...

随机推荐

  1. Android中Activity和Service的数据通讯

    在Android中,我们通常需要Activity跟Service进行通讯,很多人只知道Activity掉用Service,却不知道Service如何将数据返回给Activity.其实Service返回 ...

  2. 基于 HTML5 Canvas 实现的文字动画特效

    前言 文字是网页中最基本的元素,一般我们在网页上都是展示的静态文字,但是就效果来说,还是比较枯燥的.文字淡入淡出的动画效果在项目中非常实用,如果有某些关键的文字,可以通过这种动态的效果来提醒用户阅读. ...

  3. 2017级C语言教学总结

    一个学期下来,对于这门课教学还是感受挺多,多个教学平台辅助,确实和我前10年的教学方式区别很多,也辛苦很多. 一.课堂教学方面 1.课堂派预习作业 主要借助课堂派平台,每次课前发布预习作业.而预习作业 ...

  4. C语言博客-指针

    一.PTA实验作业(5分) 题目1:6-1 两个4位正整数的后两位互换 1. 本题PTA提交列表 2. 设计思路 3.代码截图 4.本题调试过程碰到问题及PTA提交列表情况说明. 无 题目2:6-3 ...

  5. 201621123057 《Java程序设计》第14周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 2. 使用数据库技术改造你的系统 2.1 简述如何使用数据库技术改造你的系统.要建立什么表?截图你的表设计. 答 ...

  6. bzoj千题计划165:bzoj5127: 数据校验

    http://www.lydsy.com/JudgeOnline/upload/201712/prob12.pdf 区间的任意一个子区间都满足值域连续 等价于 区间任意一个长为2的子区间都满足值域连续 ...

  7. JavaScript AJAX实例

    原生JS实现AJAX: // method : 请求方式 POST/GET; // url: 如果为GET方式的话url里面要带参数 // obj: 准备好的容器,方便储存拿到的数据 function ...

  8. python __str__ 和__repr__方法

    看下面的例子就明白了 class Test(object): def __init__(self, value='hello, world!'): self.data = value >> ...

  9. myeclipse的导航器

    在myeclipse的导航器下面可以看到编译后的文件目录结构 如何打开导航器试图呢? 窗口->显示视图->导航器 windows->show view->Navigator 这 ...

  10. Spring MVC拦截器的配置

    最近在用SpringMVC,想用它的拦截器,但是配置了几次都不成功了,最后翻阅了不少文章终于成功了,遂记录于此,以方便他人. 首先引入命名空间: xmlns:mvc="http://www. ...