
分块/分类讨论
文章平均质量分 82
神仙数据结构
ez_lcw
这个作者很懒,什么都没留下…
展开
-
【PR #2】史莱姆(值域分段)
首先看单次询问我们怎么做。对于一个人,他的最优策略显然是不断吃最小的,并看最后能不能吃完。假设我们把区间内的数排好序了,设为 a1≤a2≤⋯≤ana_1\leq a_2\leq \cdots\leq a_na1≤a2≤⋯≤an。对于一个 uuu,它能吃完所有的人当且仅当:∀i<u,au+∑j=1i−1aj−ai≥k∀i>u,∑j=1i−1aj−ai≥k\begin{aligned}\forall i<u,a_u+\sum_{j=1}^{i-1}a_j-a_i\geq k\\原创 2022-04-11 13:20:03 · 198 阅读 · 0 评论 -
【XSY4058】区间加区间(分块FFT)
题面区间加区间题解考虑若操作是将 a1,⋯ ,ana_1,\cdots,a_na1,⋯,an 加到 bl,⋯ ,bl+n−1b_l,\cdots,b_{l+n-1}bl,⋯,bl+n−1,我们可以记录每个 lll 被操作的次数 clc_lcl,那么最后的 bi=∑j=1najci−j+1b_i=\sum_{j=1}^n a_jc_{i-j+1}bi=∑j=1najci−j+1,可以直接 FFT 优化到 O(nlogn)O(n\log n)O(nlogn)。但现在是选 aaa 中的原创 2022-02-24 14:23:42 · 360 阅读 · 0 评论 -
【CQOI2017】小Q的表格(数论,分块)
题意:有一个无限大的整数表格 fff 满足以下两条法则:f(a,b)=f(b,a)f(a,b)=f(b,a)f(a,b)=f(b,a)。b×f(a,a+b)=(a+b)×f(a,b)b\times f(a,a+b)=(a+b)\times f(a,b)b×f(a,a+b)=(a+b)×f(a,b)。初始时 f(a,b)=a×bf(a,b)=a\times bf(a,b)=a×b。有 mmm 次修改,每次修改会改变某个位置,并将所有此次修改会影响到的所有位置按照法则重置一遍。每次修改完还会询问你前原创 2022-01-18 11:59:50 · 468 阅读 · 0 评论 -
【XSY4191】sequence(分块,线段树)
题面sequence题解考虑把原序列每 kkk 位分成一段,然后对于每一段维护起点在这一段中的最小值。先考虑询问,对于起点在中间的整段我们直接线段树查区间最小值,现在考虑两边的小段。以左边的小段为例:(不妨假设它在第一段,在其他段是相同的)如图,红框内是我们起点的可选区域,那么蓝框内就是我们终点的选择区域。起点为 iii 的答案为 max(Ai,⋯ ,Ai+k−1)\max(A_i,\cdots,A_{i+k-1})max(Ai,⋯,Ai+k−1),它可以分为三段:红阴影、绿阴影、蓝阴影原创 2021-10-01 21:53:11 · 152 阅读 · 0 评论 -
【bzoj4869】【六省联考2017】相逢是问候(扩展欧拉函数)
和《花神游历各国》有异曲同工之妙。首先能想到扩展欧拉定理:ab≡{ab mod φ(p)+φ(p)if b≥φ(p)abif b<φ(p)(modp)a^b\equiv\begin{cases}a^{b\bmod \varphi(p)+\varphi(p)}&\text{if }b\geq\varphi(p)\\a^b&\text{if }b< \varphi(p)\end{cases}\pmod pab≡{abmodφ(p)+φ(p)ab原创 2021-07-17 12:53:18 · 104 阅读 · 0 评论 -
【XSY4074】intervcl C(推式子,根号分类)
题面intervcl C题解首先询问和原数列顺序无关,那么不妨把数列从大到小排序,仍记为 aia_iai。那么题目就是给出 [l,r][l,r][l,r],问 al,al+1,⋯ ,ara_l,a_{l+1},\cdots,a_ral,al+1,⋯,ar 中任取 kkk 个数,这 kkk 个数中最大值的期望。由于这是等概率选择,每种情况出现的概率为 1(mk)\dfrac{1}{\binom{m}{k}}(km)1(记 m=r−l+1m=r-l+1m=r−l+1),所以我们只需计算每种原创 2021-07-15 10:57:01 · 120 阅读 · 0 评论 -
【XSY3991】时代的眼泪·SP(分块)
题面时代的眼泪·SP题解区间置 fa 问题。根据题目 “时代的眼泪” 的提示, 考虑对序列 aaa 分块,散点往上跳我们暴力更新,下面我们只考虑整块往上跳:实际上,若块中有一点 xxx,往上跳到 yyy,但如果 yyy 已经被同一块内的访问过了,那么证明有另一点在 xxx 的更高处,此时 xxx 就可以删掉了。所以我们使用一个数据结构来维护块中还有贡献的 xxx。这样每个块只会访问整棵树一次,时间复杂度 O((n+q)n)O((n+q)\sqrt{n})O((n+q)n)。需要会长链剖分 O(原创 2021-04-06 08:29:42 · 199 阅读 · 0 评论 -
【XSY3988】安静(数学,根号分类讨论)
题面安静题解首先题目的条件可以看作是:如果当前时刻 XXX 模 TiT_iTi 为 jjj,那么就会得到 fi(j)f_i(j)fi(j) 的贡献。构造一个答案时刻 XXX,使得总贡献最大,求总贡献的最大值。注意到 t≤120t\leq 120t≤120,那么我们将 TiT_iTi 相同的归到一类:设 f(t,j)f(t,j)f(t,j) 表示当前时刻 XXX 模 ttt 为 jjj 时的总贡献,那么接下来整道题都与 nnn 无关了。现在题目的要求变成了:如果当前时刻 XXX 模 ttt 为原创 2021-04-02 07:27:35 · 220 阅读 · 0 评论 -
【XSY3913】XOR(递归,分治,剪枝)
题面XOR题解以下对于一个数 xxx,用 xix_ixi 表示 xxx 在二进制下的第 iii 位。如果这个数本身就带下标,如 aka_kak,那么用 ak,ia_{k,i}ak,i 表示 aka_kak 在二进制下的第 iii 位。发现带上绝对值很难搞,考虑如何确定绝对值的符号:对于 ∣a−b∣|a-b|∣a−b∣ 来说,我们找到 aaa 和 bbb 在二进制下最高的不同位 yyy,那么如果 ay=1a_y=1ay=1(那么 by=0b_y=0by=0),有 ∣a−b∣=a−b|a-原创 2021-03-29 21:35:54 · 155 阅读 · 0 评论 -
【XSY3976】匹配(状压dp,分层图,根号分类讨论)
题面匹配题解注意以下均有前提 a<ba<ba<b。考虑两种做法:做法一考虑 DP。设 f(i,sta)f(i,sta)f(i,sta) 表示当前已经确定了前 iii 个点之间的连边情况,且最后 i−b+1∼ii-b+1\sim ii−b+1∼i 这 bbb 个点的匹配状态为 stastasta 的方案数。转移显然,时间复杂度 O(n2b)O(n2^b)O(n2b)。做法二为了方便,不妨把所有点的编号都减 111,即原来的 1∼n1\sim n1∼n 号点变成了现在的 0∼原创 2021-03-23 20:20:03 · 114 阅读 · 0 评论 -
【XSY3919】线图(树形dp,分类讨论)
题面线图题解大力分类讨论题。显然,L(L(T))L(L(T))L(L(T)) 中的点代表着 TTT 上的一条三点链。所以 L(L(T))L(L(T))L(L(T)) 上两点的最短路显然是沿着 TTT 上两条三点链间的唯一路径走。有很多种情况,这里举一种情况吧:如图,我现在想从红线框起来的三点链走到蓝线框起来的三点链。不妨设 w1<w2w_1<w_2w1<w2,那么 dis=3w1+w2+W+3w3+w4dis=3w_1+w_2+W+3w_3+w_4dis=3w1+w2原创 2021-03-02 14:15:51 · 146 阅读 · 0 评论 -
【XSY3904】直线(分块)
题面直线题解注意到题目没有给什么特殊的性质,除了直线随机生成。所以考虑随机化算法或均摊算法。有一种很神奇的分块做法:考虑将整个平面分成 B×BB\times BB×B 块,每块大小 109B×109B\dfrac{10^9}{B}\times\dfrac{10^9}{B}B109×B109,而且每一个块记录一下有哪些直线经过它,询问的时候直接枚举经过询问点所在块内的所有直线并判断统计。分析一下时间复杂度:首先是预处理,对于每一条直线,它经过的块数大约为 BBB,所以这部分的时间复杂度是原创 2021-02-25 21:23:08 · 136 阅读 · 0 评论 -
【XSY2423】跳蚤(根号分治)
题面题解神奇的分类讨论。首先注意到每次所有跳蚤都只会往右跳,也就是说只要某一只跳蚤跳出了 max(ri)\max(r_i)max(ri) 它就不会再有贡献了。(和 火神的鱼 类似)令 R=max(ri)R=\max(r_i)R=max(ri)。考虑根号分治,将所有的跳蚤分成两类:将 ti>Rt_i> \sqrt{R}ti>R 的分为第一类,将 ti≤Rt_i\leq \sqrt{R}ti≤R 的分为第二类。对于第一类,我们暴力维护这些鱼的位置,因为他们原创 2020-11-25 18:24:59 · 193 阅读 · 0 评论 -
【51Nod1386】双马尾机器人(分块+dp)
对于这种找互质的数的集合的题,一般是讨论每个数的质因子会不会有重复。听说这种互质的题把质因子分为小于 n\sqrt{n}n 和大于 n\sqrt{n}n 是经典套路?因为当 nnn 很小的时候,小于 n\sqrt{n}n 的质数并不多。比如对于这一题,小于 N=1000\sqrt{N=1000}N=1000 的数只有 111111 个。那么对于那些只有小于 N\sqrt{N}N 的质因子的数进行状压 dp,设 dp(i,j)dp(i,j)dp(i,j) 为前 iii 个数中,所有选出的数的所原创 2020-05-26 14:06:57 · 490 阅读 · 0 评论 -
UVA12003 Array Transformer(分块,块内二分)
我们考虑用分块来水过此题我们先将原序列进行分块,对于某个块 BBB 内的数,我们把它们放进一个数组 block[B][ ]block[B][\ ]block[B][ ] 里,再对数组进行排序。那么我们就得到了 n\sqrt{n}n 个有序数组 block[ ][ ]block[\ ][\ ]block[ ][ ]。然后对于修改操作,...原创 2020-01-17 14:18:42 · 178 阅读 · 0 评论