随笔分类 - 数据结构 - 分块
摘要:题目大意:维护一个长度为 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
        阅读全文
                
摘要:题目大意:维护一个 N 个数组成的序列,支持区间加、区间乘、单点询问。 题解:在每一个块中维护两个标记,即:整块加和的标记和整块乘积的标记。不过由于有两个标记,涉及到计算区间总和的顺序问题。 一个指定块的区间加标记为 $atag$,区间乘标记为 $mtag$,区间除去标记的和为 $sum$。 第一种
        阅读全文
                
摘要:题目大意:给定一个由 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==' '
        阅读全文
                
摘要:题目大意:维护一个有 N 个数组成的序列,支持查询区间元素和、区间元素向下取整的开方操作。 题解:由于序列中维护的数最大不超过整数的范围,而对于整数范围内的数来说,一个数在开方 5 次及以上时,结果不是 0 就是 1。 因此,可以在维护块内元素大小之和的同时,也维护一个标记,即: 若块内所有元素大小
        阅读全文
                
摘要:题目大意:维护 N 个数组成的序列,支持两种操作:区间加、区间查询某个值的前驱(小于该值的最大值,若无前驱,输出 1)。 题解1:可以像分块2一样,维护每个块内元素的一个有序序列,每次查询时二分查找即可。 代码如下
        阅读全文
                
摘要:题目大意:分块维护一个有 n 个数字的序列,有两种操作:区间加,区间查询小于某个数的元素个数。n using namespace std; const int maxn=5e4+10; const int maxb=800; inline int read(){ int x=0,f=1;char c
        阅读全文
                
摘要:题目大意:维护一个长度为 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
        阅读全文
                

 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号