随笔分类 -  数据结构 - 分块

摘要:题目大意:维护一个长度为 N 的序列,支持区间修改、单点查询。 代码如下 cpp include using namespace std; const int maxn=5e4+10; const int maxb=800; int n,m,a[maxn]; struct node{ int l,r 阅读全文
posted @ 2019-03-28 10:32 shellpicker 阅读(116) 评论(0) 推荐(0)
摘要:题目大意:维护一个 N 个数组成的序列,支持区间加、区间乘、单点询问。 题解:在每一个块中维护两个标记,即:整块加和的标记和整块乘积的标记。不过由于有两个标记,涉及到计算区间总和的顺序问题。 一个指定块的区间加标记为 $atag$,区间乘标记为 $mtag$,区间除去标记的和为 $sum$。 第一种 阅读全文
posted @ 2018-11-18 00:04 shellpicker 阅读(135) 评论(0) 推荐(0)
摘要:题目大意:给定一个由 N 个数组成的序列,维护两种操作:单点询问,单点插入。N using namespace std; const int maxn=2e5+10; inline int read(){ int x=0,f=1;char ch; do{ch=getchar();if(ch==' ' 阅读全文
posted @ 2018-11-16 22:04 shellpicker 阅读(162) 评论(0) 推荐(0)
摘要:题目大意:维护一个有 N 个数组成的序列,支持查询区间元素和、区间元素向下取整的开方操作。 题解:由于序列中维护的数最大不超过整数的范围,而对于整数范围内的数来说,一个数在开方 5 次及以上时,结果不是 0 就是 1。 因此,可以在维护块内元素大小之和的同时,也维护一个标记,即: 若块内所有元素大小 阅读全文
posted @ 2018-11-16 18:06 shellpicker 阅读(152) 评论(0) 推荐(0)
摘要:题目大意:维护 N 个数组成的序列,支持两种操作:区间加、区间查询某个值的前驱(小于该值的最大值,若无前驱,输出 1)。 题解1:可以像分块2一样,维护每个块内元素的一个有序序列,每次查询时二分查找即可。 代码如下 阅读全文
posted @ 2018-11-15 11:46 shellpicker 阅读(230) 评论(0) 推荐(0)
摘要:题目大意:分块维护一个有 n 个数字的序列,有两种操作:区间加,区间查询小于某个数的元素个数。n using namespace std; const int maxn=5e4+10; const int maxb=800; inline int read(){ int x=0,f=1;char c 阅读全文
posted @ 2018-11-14 20:18 shellpicker 阅读(282) 评论(0) 推荐(0)
摘要:题目大意:维护一个长度为 N 的序列,支持两种操作:区间修改、区间求和。N using namespace std; const int maxn=5e4+10; inline int read(){ int x=0,f=1;char ch; do{ch=getchar();if(ch==' ')f 阅读全文
posted @ 2018-10-15 19:49 shellpicker 阅读(123) 评论(0) 推荐(0)