传送门 由乃tql…… 然后抄了一波zcy大佬的题解 我们考虑把询问给离线,用莫队做 然后用bitset维护,每一位代表每一个数字是否存在,记为$now1$ 然后再记录一个$now1$的反串$now2$(就是每一位代表的是$N-x$),干吗用等下说 1操作的话,因为每一个位置代表一个数字,如果存在$z-y=x$,可以转化为同时存在$z$和$z-x$,那么把$now1$左移$x$位并与$now1$做$\&$运算,看看是否等于$0$,如果不是说明不存在 2操作的话,$now2$中的$y'$代表数字$…
传送门 题意: 给你一个序列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…
题意:多次询问,区间内是否存在两个数,使得它们的和为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)…
想看题目的戳我. 我刚开始觉得这道题目好难. 直到我从Awson大佬那儿了解到有一个叫做bitset的STL,这道题目就很容易被解开了. 想知道这个神奇的bitset的戳我. 这个题目一看就感觉是莫队,其实是别人告诉我的,分块不太好弄. 减法:\[a-b=x => a=x+b\]就是在权值数组上右移x位. 加法同理. 至于乘法,直接暴力找因子,反正是\(\sqrt{n}\)复杂度. 时间复杂度显然是:\(O(\)能过\()\) code: #include <bits/stdc++.h>…
这题是莫队维护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…
对于加减,用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<…
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…
原题传送门 这题还算简单(我记得我刚学oi时就来写这题,然后暴力都爆零了) 看见无修改,那么这题应该是莫队 维护两个bitset,第二个是第一个的反串,bitset内维护每个数字是否出现过 第一种操作: 要求y-z=x,所以y=z+x 最后判断有没有k和k-x都出现在bitset中的情况 第二种操作: 和第一种类似的方法,就不再讲了qwqwq 第三种操作: 暴力把x分解成两个数的乘积,判断这两个数是否出现过 因为莫队是\(O(n \sqrt n)\)的,查询\(O(\frac{mN}{\omeg…
传送门 毒瘤lxl 本质是莫队,关键是怎么处理询问 这里需要开两个bitset(记为\(b1,b2\)),分别存\(x\)和\(n-x\)是否出现 对于询问1,即\(x-y=z\),由于\(y=x-z\),所以要求\(x\)和\(x-z\)同时存在,相当于\(b1\&(b1<<z)\)是否有1,没有就是不存在这种情况 对于询问2,即\(x+y=z\),这里记\(w=n-y\),原式变为\(x+n-w=z\),即\(x-w=z-n\),和情况1类似,相当于要知道\(b1\&(b2…
ennmm...bitset能过系列. 莫队+bitset \(\mathcal{O}(m\sqrt n + \frac{nm}{w})\) 维护一个正向的 bitset <N> mem ,再维护一个反向的 bitset <N> mem1,即 mem1[N-x]=mem[x]; 对于 \(-\) 直接 mem&mem<<x 就是相差 \(x\) 的两个点 与 一下 对于 \(+\) 直接 mem&mem1<<(N-x) 因为原来 mem[i]…
正解:莫队 解题报告: 这是,传送门qwq 昂大概是莫队板子题? 首先可以推出来答案是(∑C(2,color[i]))/C(2,r-l+1)趴?挺显然的不解释了qwq 然后显然除数直接做就成,考虑怎么求被除数 ∑C(2,color[i]) 可以发现从[l,r]到[l,r+1]只++color[r+1]然后就没有改变了呢,那答案就只用改变一点儿(懒得港多少了太容易算了...),所以考虑用莫队 似,似乎就没了? 好趴果然板子题没什么好讲的呢 (啊想起来,就是,这个代码我觉得不是最板子的?就是和书上的…
题目地址 小清新人渣的本愿 [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\),里面…
莫队--------一个优雅的暴力 莫队是一个可以在O(n√n)内求出绝大部分无修改的离线的区间问题的答案(只要问题满足转移是O(1)的)即你已知区间[l,r]的解,能在O(1)的时间内求出[l-1,r][l+1,r][l,r-1][l,r+1]的解.否则时间复杂度为O(kn√n)(k为转移的时间) 以下默认转移是O(1)的 显然,我们如果得知[l,r]的解,我们便可以在O(|l2-l|+|r2-r|)的时间内求出[l2,r2]的解 那么,对于q个询问(假设q与n同数量级),我们如果能找到一个合…
题目链接 洛谷P3676 题解 我们先维护\(1\)为根的答案,再考虑换根 一开始的答案可以\(O(n)\)计算出来 考虑修改,记\(s[u]\)表示\(u\)为根的子树的权值和 当\(u\)节点产生\(v\)的增量时,只影响\(1\)到\(u\)路径上的\(s\),权值和都\(+v\) 而对答案的影响是 \[ \begin{aligned} \Delta ans &= \sum\limits_{i}^{k}(s_i + v)^{2} - \sum\limits_{i = 1}^{k} s_i^…
洛谷题面传送门 题目名称好评(实在是太清新了呢) 首先考虑探究这个"换根操作"有什么性质.我们考虑在换根前后虽然每个点的子树会变,但整棵树的形态不会边,换句话说,割掉每条边后,得到的两个子树的中点权之和不会变,因此我们考虑将这个东西与平方和挂钩.考虑构造 \(S=\sum\limits_{i=1}^nsiz_i(sum-siz_i)\),其中 \(siz_i\) 为 \(i\) 子树内所有点点权之和,\(sum\) 为所有点点权之和.那么不难发现 \(S\) 就是断掉所有点之后形成的两…
luogu 题意 给你一个序列a,长度为n,有m次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ,这三个操作分别为操作1,2,3 选出的这两个数可以是同一个位置的数 所有数据\(\le 10^5\) sol 正好今天考试一道题要用到\(bitset\)就跑过来写一下. 所谓\(bitset\)其实就是一个不用手写的压位,一般用来优化暴力,复杂度\(O(\frac{n^2}{64})\)哈.(…
BZOJ传送门:洛谷传送门 数颜色 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P Col 把第P支画笔替换为颜色Col. 为了满足墨墨的要求,你知道你需要干什么了吗? 输入输出格式 输入格式: 第1行两个整数N,M,分别代表初始画笔的数量以及墨墨会做的事情的个数. 第2行N个整数,分别代表初始画笔排中第i支画笔的颜色. 第3行到第2…
题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. R P Col 把第P支画笔替换为颜色Col. 为了满足墨墨的要求,你知道你需要干什么了吗? 输入输出格式 输入格式: 第1行两个整数N,M,分别代表初始画笔的数量以及墨墨会做的事情的个数. 第2行N个整数,分别代表初始画笔排中第i支画笔的颜色. 第3行到第2+M行,每行分别代表墨墨会做的一件事…
题面 传送门 题解 维包一生推 首先请确保您会二次离线莫队 那么我们现在的问题就是怎么转移了,对于\(i\)和前缀\([1,r]\)的贡献,我们拆成\(b_i\)和\(c_i\)两部分,其中\(b_i\)表示\(i\)的因数个数,\(c_i\)表示\(i\)的倍数个数 \(c_i\)非常好处理,插入\(a_i\)的时候直接暴力枚举它的所有因子\(d\),并令\(c_d++\)就好了,预处理之后复杂度上界是\(O(\sqrt{n})\)的 然而\(b_i\)就显得非常辣手--因为如果\(b_i\)…
题目链接 因为每个数都是\(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\),这个显然没法用\…
传送门 题意:给定自然数n.k.x,你要求出第k小的长度为n的逆序对对数为x的1~n的排列 $n \le 300, k \le 10^13$ 一下子想到hzc讲过的DP 从小到大插入,后插入不会对前插入造成影响,$f[i][j]$表示$1..n$排列$j$个逆序对的方案数,枚举插在哪里 然后从前向后选择满足要求的字典序最小的构造就行了 一开始没注意$DP$方程是$O(n^4)$的T了一次,以后一定要跑一下极限数据 加上前缀和优化 然后会爆long long,但我们只关心与k相比大小,所以$>k$…
题目描述 题目还是简单一点好. 给定自然数n.k.x,你要求出第k小的长度为n的逆序对对数为x的1~n的排列a1,a2...an,然后用仙人图上在线分支定界启发式带花树上下界最小费用流解决问题,保证存在. 输入格式 一行三个自然数n.k.x. 输出格式 输出满足条件的排列,一行n个数,用空格分隔. 题目都说了:用仙人图上在线分支定界启发式带花树上下界最小费用流解决问题就可以了 看数据范围猜是DP...... 我们可以用$f[i][j]$表示序列长度为i,其中有j对逆序对时的可能组数,转移也很显然…
Description 题库链接 给你一个序列 \(A\) ,长度为 \(n\) ,有 \(m\) 次操作,每次询问一个区间是否可以 选出两个数它们的差为 \(x\) : 选出两个数它们的和为 \(x\) : 选出两个数它们的乘积为 \(x\) . \(1\leq n,m,A_i\leq 100000\) Solution 前两个操作 \(bitset\) 可以解决:后一个操作直接暴力枚举因数单个询问 \(O(\sqrt n)\) .复杂度承受得起. Code #include <bits/st…
传送门 思路 这思路好妙啊! 首先很多人都会想到推式子之后树链剖分+线段树,但这样不够优美,不喜欢. 脑洞大开想到这样一个式子: \[ \sum_{x} sum_x(All-sum_x) \] 其中\(sum_x\)表示\(x\)子树和,\(All\)表示所有点的权值和. 发现不管哪个点为根,只要每个点的权值不变,这个式子的值就不变. 证明:对于点对\((u,v)\),\(w_u\times w_v\)被算了\(dis(u,v)\)次,因为每个在路径上的\(x\)都会算一次. 于是就有 \[ W…
传送门 感觉这题做下来心态有点崩……$RMQ$求$LCA$没有树剖快我可以理解为是常数太大……然而我明明用了自以为不会退化的点分然而为什么比会退化的点分跑得反而更慢啊啊啊啊~~~ 先膜一波zsy大佬 讲讲做法.题目的要求是给定一个根$p$,求$\sum _{i=1}^ns_i^2$,其中$s_i$表示子树中的点权和 我们设$sum=\sum _{i=1}^n val_i$,即整棵树的点权和.先考虑一下$\sum _{i=1}^ns_i$怎么求.考虑一下每一个点的贡献,每一个点都会对被计算$dep…
题目背景 本题时限2s,内存限制256M 题目描述 在很久很久以前,有一棵n个点的树,每个点有一个点权. 现在有q次操作,每次操作是修改一个点的点权或指定一个点,询问以这个点为根时每棵子树点权和的平方和. (题目不是很好懂,没看太懂的可以看看样例解释) 输入输出格式 输入格式: 第一行两个整数n.q. 接下来n-1行每行两个整数a和b,表示树中a与b之间有一条边,保证给出的边不会重复. 接下来一行n个整数,第i个整数表示第i个点的点权. 接下来q行每行两或三个数,如果第一个数为1,那么接下来有两…
https://www.luogu.org/problemnew/show/P3676 这题被我当成动态dp去做了,码了4k,搞了一个换根的动态dp #include<cstdio> #include<algorithm> #include<cstring> using namespace std; typedef long long ll; struct E { int to,nxt; }e[]; ],ne; struct P1 { int len;ll a,b,c,…
https://zybuluo.com/ysner/note/1109536 题面 给你一个序列a,长度为n,有m次操作,每次询问一个区间 是否可以选出两个数它们的差为x 是否可以选出两个数它们的和为x 是否可以选出两个数它们的乘积为x . 选出的这两个数可以是同一个位置的数 对于100%的数据,n,m,c <= 100000 知识迁移 \(bitset\)的原理是将一大堆值为\(0/1\)的数压成一个数. 通过\(i>>x\)等操作,我们可以快速访问\(i\)数组右移\(x\)位后的状…
传送门 Solution 莫队,用bitset来存储出现的数 如果是和或者差,直接通过左移右移就可以实现判断 对于积的询问,暴力判就行了,因数只要枚举\(\sqrt n\)个 总复杂度是\(O(n^2/32)\),反正\(3s\)是可以过的咯 Code  #include<bits/stdc++.h> #define ll long long #define max(a,b) ((a)>(b)?(a):(b)) #define min(a,b) ((a)<(b)?(a):(b))…