对于加减,用bitset维护当前每个数有没有 对于乘,暴力枚举约数 然后莫队 复杂度$O(m(\sqrt{n}+\frac{c}{64}))$ #include<bits/stdc++.h> #define pa pair<ll,ll> #define CLR(a,x) memset(a,x,sizeof(a)) #define MP make_pair using namespace std; typedef long long ll; ; inline char gc(){ r…
[洛谷3674]小清新人渣的本愿(莫队,bitset) 题面 洛谷,自己去看去,太长了 题解 很显然的莫队. 但是怎么查询那几个询问. 对于询问乘积,显然可以暴力枚举因数(反正加起来也是\(O(n\sqrt{n})\)的 对于加减????暴力显然\(GG\) 所以我们来用\(bitset\)玄学优化一下... 然后就能\(AC\)了 时间复杂度? 大概是\(O(n^2/64)\)吧.. #include<iostream> #include<cstdio> #include<…
这题是莫队维护bitset. 然而我并不会bitset以前讲过认为不考就没学 我真的太菜了. 首先维护一个权值的bitset--s. 操作3比较简单,我们可以\(\sqrt{x}\)枚举约数然后判断就行了. 操作1就是求是否存在 \[\exists{a,b},a-b=x\] 移一下项 \[a=x+b\] 也就是\(\text{(s<<x)}\)&\(x\neq0\). 那么操作2该怎么办? 我们先设\(b'=n-b\)因为\(x=a+b\) \[a-b'=a-(n-b)=a+b-n=x…
传送门 由乃tql…… 然后抄了一波zcy大佬的题解 我们考虑把询问给离线,用莫队做 然后用bitset维护,每一位代表每一个数字是否存在,记为$now1$ 然后再记录一个$now1$的反串$now2$(就是每一位代表的是$N-x$),干吗用等下说 1操作的话,因为每一个位置代表一个数字,如果存在$z-y=x$,可以转化为同时存在$z$和$z-x$,那么把$now1$左移$x$位并与$now1$做$\&$运算,看看是否等于$0$,如果不是说明不存在 2操作的话,$now2$中的$y'$代表数字$…
luogu 题意 给你一个序列a,长度为n,有m次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ,这三个操作分别为操作1,2,3 选出的这两个数可以是同一个位置的数 所有数据\(\le 10^5\) sol 正好今天考试一道题要用到\(bitset\)就跑过来写一下. 所谓\(bitset\)其实就是一个不用手写的压位,一般用来优化暴力,复杂度\(O(\frac{n^2}{64})\)哈.(…
https://zybuluo.com/ysner/note/1109536 题面 给你一个序列a,长度为n,有m次操作,每次询问一个区间 是否可以选出两个数它们的差为x 是否可以选出两个数它们的和为x 是否可以选出两个数它们的乘积为x . 选出的这两个数可以是同一个位置的数 对于100%的数据,n,m,c <= 100000 知识迁移 \(bitset\)的原理是将一大堆值为\(0/1\)的数压成一个数. 通过\(i>>x\)等操作,我们可以快速访问\(i\)数组右移\(x\)位后的状…
题目地址 小清新人渣的本愿 [Ynoi2017]由乃的玉米田 所以这两题也就输出不一样而已 题解 这种lxl的题还是没修改操作的题基本就是莫队 分开考虑每个询问 1.减法 \(a-b=x⇒a=b+x\) 用一个\(bitset\),第\(i\)位表示有没有\(i\)这个数 那么查询其实就等价于查询bit&(bit>>x)之后里面有没有1 \(a+b=x\) 2.加法 \(a+b=x\) 设\(p=n-b\) \(a-p=a-n+b=x-n\) 维护一下另外一个\(bitset\),里面…
P3674 小清新人渣的本愿 一道妙不可言的题啊,,, 一看就知道是个莫队 考虑求答案 1号操作就是个大bitset,动态维护当前的bitset \(S\),把能取哪些值都搞出来,只要\(S\ and\ (S\ shr\ x)\)不为空,就有解 考虑2号操作,\(a+b=c\)可以转化为\((10w-b)-a=10w-c\),然后维护一个反的bitset,套路一样 3号操作...emmm...只需要暴力枚举因数,,,复杂度很对 // It is made by XZZ #include<cstd…
传送门 题意: 给你一个序列a,长度为n,有Q次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ,这三个操作分别为操作1,2,3 题面太强啦!!! 感觉就是莫队,想了一下分块不好搞更坚定了莫队的信念 $a-b=x$,$a=x+b$,放在权值数组上就是b右移x位,$bitset$大法好 加法同理 乘法,总共就$\sqrt{N}$个约数.... 感觉复杂度$O(\frac{N^2}{64} + N…
题目链接 因为每个数都是\(10^5\)以内,考虑直接用\(bitset\)维护. \(a-b=x\),其实就是看是否有\(p\)和\(p+x\)同时存在,直接\(bitset\)移位按位与一下就好了. \(a+b=x\),这个直接搞不好搞,所以考虑转化. \[a-(N-b)=a+b-N=x-N\] 其中\(N\)为一个常数,令\(f(x)=N-x\),则有 \[f(b)-f(x)=a\] 于是再开个\(bitset\)维护\(f(x)\),然后就很显然了. \(a*b=x\),这个显然没法用\…