线性结构——分块算法
Alex_McAvoy
想要成为渔夫的猎手
展开
-
线性结构 —— 分块算法
【概述】所谓分块,即对于一个长度为 n 的序列,设块的大小为 S,从序列的第一个元素起,每 S 个元素被分成一块,若剩余的元素不足 S 个,令他们组成一块。经过分块后的数组,称为块状数组,在块状数组的基础上加以扩展,即可得到块状链表。在一个区间操作时,完整包含于区间的块称为整块,只有部分包含于区间的块,称为不完整的块,不完整的块实质上行即为区间左右端点所在的两个块。在许多区间问题中,使...原创 2019-07-31 15:49:41 · 565 阅读 · 0 评论 -
线性结构 —— 分块算法 —— 分块九讲
模型1:区间加法,单点询问问题:给出一个长为 n 的数列,以及 n 个操作,操作涉及区间加法,单点查值。对每个块设置一个加法标记,记录这个块中元素一共加了多少,每次操作对整块直接 O(1) 标记,而不完整块元素较少,暴力修改元素的值即可,每次询问时返回元素的值加上其所在块的加法标记。模型2:区间加法,询问区间内小于某个值 x 的元素个数问题:给出一个长为 n 的数列,以及 n 个操...转载 2019-08-02 17:53:05 · 1331 阅读 · 0 评论 -
数列分块入门 7(LibreOj-6283)
【题目描述】给出一个长为 n 的数列,以及 n 个操作,操作涉及区间乘法,区间加法,单点询问。【输入格式】第一行输入一个数字 n。第二行输入 n个数字,第 i 个数字为 ai,以空格隔开。接下来输入 n 行询问,每行输入四个数字 opt、l、r、c,以空格隔开。若 opt=0,表示将位于 [l,r] 的之间的数字都加 c。若 opt=1,表示将位于 [l,r] 的之...原创 2019-08-02 16:18:24 · 482 阅读 · 0 评论 -
数列分块入门 5(LibreOj-6281)
【题目描述】给出一个长为 n 的数列,以及 n 个操作,操作涉及区间开方,区间求和。【输入格式】第一行输入一个数字 n。第二行输入 n个数字,第 i 个数字为 ai,以空格隔开。接下来输入 n 行询问,每行输入四个数字 opt、l、r、c,以空格隔开。若 opt=0,表示将位于 [l,r] 的之间的数字都开方,对于区间中的每个 ai(l<=i<=r),ai-...原创 2019-08-01 15:47:20 · 365 阅读 · 0 评论 -
数列分块入门 3(LibreOj-6279)
【题目描述】给出一个长为 n 的数列,以及 n 个操作,操作涉及区间加法,询问区间内小于某个值 x 的前驱(比其小的最大元素)。【输入格式】第一行输入一个数字 n。第二行输入 n个数字,第 i 个数字为 ai,以空格隔开。接下来输入 n 行询问,每行输入四个数字 opt、l、r、c,以空格隔开。若 opt=0,表示将位于 [l,r] 的之间的数字都加 c。若 opt...原创 2019-07-31 17:01:13 · 794 阅读 · 1 评论 -
数列分块入门 2(LibreOj-6278)
【题目描述】给出一个长为 n 的数列,以及 n 个操作,操作涉及区间加法,询问区间内小于某个值 x 的元素个数【输入格式】第一行输入一个数字 n。第二行输入 n个数字,第 i 个数字为 ai,以空格隔开。接下来输入 n 行询问,每行输入四个数字 opt、l、r、c,以空格隔开。若 opt=0,表示将位于 [l,r] 的之间的数字都加 c。若 opt=1,表示询问位于...原创 2019-07-31 16:30:29 · 782 阅读 · 0 评论 -
数列分块入门 4(LibreOj-6280)
【题目描述】给出一个长为 n 的数列,以及 n 个操作,操作涉及区间加法,区间求和。【输入格式】第一行输入一个数字 n。第二行输入 n个数字,第 i 个数字为 ai,以空格隔开。接下来输入 n 行询问,每行输入四个数字 opt、l、r、c,以空格隔开。若 opt=0,表示将位于 [l,r] 的之间的数字都加 c。若 opt=1,表示询问位于 [l,r] 的所有数字的...原创 2019-07-30 18:48:42 · 402 阅读 · 0 评论 -
数列分块入门 1(LibreOj-6277)
【题目描述】给出一个长为 n 的数列,以及 n 个操作,操作涉及区间加法,单点查值。【输入格式】第一行输入一个数字 n。第二行输入 n个数字,第 i 个数字为 ai,以空格隔开。接下来输入 n 行询问,每行输入四个数字 opt、l、r、c,以空格隔开。若 opt=0,表示将位于 [l,r] 的之间的数字都加 c。若 opt=1,表示询问 a[r] 的值(l 和 c ...原创 2019-07-30 17:14:56 · 234 阅读 · 1 评论 -
数列分块入门 9(LibreOj-6285)
【题目描述】给出一个长为 n 的数列,以及 n 个操作,操作涉及询问区间的最小众数。【输入格式】第一行输入一个数字 n。第二行输入 n个数字,第 i 个数字为 ai,以空格隔开。接下来输入 n 行询问,每行输入两个数字 l、r,以空格隔开。表示先查询位于 [l,r] 的数字的众数。【输出格式】对于每次询问,输出一行一个数字表示答案。【样例】样例输入4...原创 2019-08-02 17:21:38 · 577 阅读 · 0 评论 -
数列分块入门 8(LibreOj-6284)
【题目描述】给出一个长为 n 的数列,以及 n 个操作,操作涉及区间询问等于一个数 c 的元素,并将这个区间的所有元素改为 c。【输入格式】第一行输入一个数字 n。第二行输入 n个数字,第 i 个数字为 ai,以空格隔开。接下来输入 n 行询问,每行输入三个数字 l、r、c,以空格隔开。表示先查询位于 [l,r] 的数字有多少个是 c,再把位于 [l,r] 的数字都改为...原创 2019-08-02 16:57:13 · 413 阅读 · 0 评论 -
数列分块入门 6(LibreOj-6282)
【题目描述】给出一个长为 n 的数列,以及 n 个操作,操作涉及单点插入、单点询问、数据随机生成。【输入格式】第一行输入一个数字 n。第二行输入 n个数字,第 i 个数字为 ai,以空格隔开。接下来输入 n 行询问,每行输入四个数字 opt、l、r、c,以空格隔开。若 opt=0,表示在第 l 个数字前插入数字 r(c 忽略)若 opt=1,表示询问位于 ar 的值...原创 2019-08-01 17:43:25 · 491 阅读 · 0 评论