![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构---分块
pengwill97
C.S Master
展开
-
【滚动训练】LOJ6283. 数列分块入门 7 (分块)
题意给出一个长为 nnn 的数列,以及 nnn 个操作,操作涉及区间乘法,区间加法,单点询问。题解主要考虑如何维护加法和乘法标记。 考虑一般情况,设任意块内中任意元素为xxx,所携带的加法标记为aaa,所携带的乘法标记为mmm。现在对区间进行加法,加数为a′a′a',原先的值为mx+amx+amx+a,进行加法后的值为mx+a+a′mx+a+a′mx+a+a',所以只需要更新加...原创 2018-07-08 14:48:36 · 329 阅读 · 0 评论 -
【滚动训练】BZOJ2002: [Hnoi2010]Bounce 弹飞绵羊(分块)
题意某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当绵羊达到第i个装置时,它会往后弹ki步,达到第i+ki个装置,若不存在第i+ki个装置,则绵羊被弹飞。绵羊想知道当它从第i个装置起步时,被弹几次后会被弹飞。为了使得游戏更有趣,Lostmonk...原创 2018-07-09 17:52:08 · 205 阅读 · 0 评论 -
LOJ 6277. 数列分块入门 1 (分块)
题意给出一个长为 nnn 的数列,以及 nnn 个操作,操作涉及区间加法,单点查值。题解分块,每次更新的话对块两侧不完整的地方暴力更新,对完整的块内部分打标记,查询时直接返回数据值和标记部分的值即可。代码#include<bits/stdc++.h>using namespace std;typedef long long ll;const int nma...原创 2018-07-03 01:35:35 · 233 阅读 · 0 评论 -
【滚动训练】 LOJ 6278. 数列分块入门 2 (分块)
题意给出一个长为 n 的数列,以及 n 个操作,操作涉及区间加法,询问区间内小于某个值 x 的元素个数。题解分块由于每块内有n−−√n\sqrt{n}个元素,在暴力的程度上保证了复杂度。于是我们主要考虑的是如何维护块内信息。 根据分块入门 1的经验,需要一个tag来标记对整个块进行的操作和为多少。由于这道题要进行计数,于是问题就转换成如何快速统计区间的数目问题。方案一...原创 2018-07-03 14:38:25 · 567 阅读 · 0 评论 -
【滚动训练】LOJ6279. 数列分块入门 3 (分块)
题意给出一个长为 n 的数列,以及 n 个操作,操作涉及区间加法,询问区间内小于某个值 x 的前驱(比其小的最大元素)。题解这道题和数列分块入门2很类似,因为要询问区间小于x的前驱,暴力查找肯定是不行的。自然想到如果区间内是有序的话,就可以在块内二分了。维护有序可以套用上一题的方案,即块内暴力更新的时候sort,或者是使用set自动维护有序。方案一 块内sort每次对暴力更新的...原创 2018-07-04 21:30:47 · 359 阅读 · 0 评论 -
【滚动训练】LOJ 6280. 数列分块入门 4(分块)
题意给出一个长为 n 的数列,以及 n 个操作,操作涉及区间加法,区间求和。题解维护两个标记,一个是区间和,一个是tag表示该区间总共打了多少加法。代码#include&lt;bits/stdc++.h&gt;using namespace std;typedef long long ll;const int nmax = 5e4 + 100;const int I...原创 2018-07-05 12:14:05 · 247 阅读 · 0 评论 -
【滚动训练】Vijos1514 天才的记忆 (分块/RMQ)
题意询问区间最大值题解RMQ问题,使用ST表或者分块。 分块居然比ST表跑的还快你敢信。代码ST表#include &lt;cstdio&gt;#include &lt;algorithm&gt;#define rep(i,a,b) for (int i = a; i&lt;=b; ++i)using namespace std;const int n...原创 2018-07-05 13:31:24 · 288 阅读 · 0 评论 -
【滚动训练】LOJ6281. 数列分块入门 5 (分块)
题意给出一个长为 nnn 的数列 a1…ana1…ana_1\ldots a_n,以及 nnn 个操作,操作涉及区间开方,区间求和。题解维护区间和。对于区间开方操作,维护区间最小值,若区间最小值小于等于1,那么就不需要进行操作。否则暴力更新区间最小值和区间和。代码#include<bits/stdc++.h>using namespace std;t...原创 2018-07-07 15:33:19 · 233 阅读 · 0 评论 -
【滚动训练】LOJ6282. 数列分块入门 6 (分块)
题意给出一个长为 nnn 的数列,以及 nnn 个操作,操作涉及单点插入,单点询问,数据随机生成。题解我直接用的vector来维护。这里需要用到块重构,即进行插入操作的过多,会导致某一块的数量非常的多。这样会使得块之间不平衡,复杂度不能得到保证。这时候就要对所有的元素重新分块,以保证复杂度。代码#include<bits/stdc++.h>using name...原创 2018-07-07 18:17:42 · 430 阅读 · 0 评论