树状数组的一些基本操作。 树状数组支持单点修改和查询区间和的操作,但和线段树不同,它不支持区间修改操作(有些题目可以将区间修改转化为单点修改,有些则不可以)。下面介绍树状数组的预处理和基本操作。 1.求lowbit(n) 上一篇博客介绍了lowbit的定义和使用定义的基本求法。但是依据定义求lowb ...
分类:
编程语言 时间:
2020-07-06 11:14:58
阅读次数:
60
题目 Description 给定一个正整数序列A,要求支持以下操作 1): ADD a b c 表示在[a,b]上加上一个常数C。 2): COVER a b c 把[a,b]整体赋值为一个常数K。 3): QUERY a b 查询[a,b]的sum。 Input 第一行两个正整数n、m,n表示序 ...
分类:
其他好文 时间:
2020-07-03 17:30:05
阅读次数:
63
#线段树 ##走进线段树 线段树是什么? 顾名思义,就是把一颗树拆成若干个点段, 每一个父结点可以包含其子节点的信息(看你要表示什么了),例如该父结点的全部子节点的值之和,该父节点范围内子节点的最大值,那么就可以采取一些例如区间查询,区间修改,单点查询,单点修改的操作了,显然是用空间来换时间的算法( ...
分类:
其他好文 时间:
2020-07-03 12:41:17
阅读次数:
59
线段树用途: 用于区间修改与求和: 区间修改: 修改l到r之间的值 , 遍历线段树 , 若某个子节点l<=L && R<=r , 则在该节点上标记修改的值 , 访问该节点及他的子节点时再将标记下传; 线段树可持久化: 核心: 永远不修改节点上的值 , 只会新建节点 ; 实现: 每当修改值的时候 , ...
分类:
其他好文 时间:
2020-06-29 22:44:51
阅读次数:
106
P3372 【模板】线段树 1 要求实现一个数据结构支持区间查询和区间修改 改装后的树状数组 #include<cstdio> using namespace std; #define MAXN 100010 int n,m;long long tree1[MAXN],tree2[MAXN],k,K ...
分类:
编程语言 时间:
2020-06-12 01:00:41
阅读次数:
64
树状数组 1. 算法分析 树状数组作用 单点修改 区间查询 区间修改(加上差分) 核心思想 把前n个数划分为log(n)个区间,分别维护这log(n)个区间的和,在求解前缀和Sn的时候,从求解n个数字的和变成求解log(n)个区间的和来加快运算 具体操作 维护log(n)个区间,每个区间用数组c来维 ...
分类:
编程语言 时间:
2020-06-09 16:13:22
阅读次数:
60
看到区间修改,可以想想差分,这题显然就是在差分数组后,将b1-bn变为0,而个数就是b1的个数 最优答案肯定是刚开始挑一个正的和一个负的消掉,当某一个数被消完后,后面的就是跳同一种操作。 那么个数就是正数-负数的绝对值+1 #include<bits/stdc++.h> using namespac ...
分析: 这道题可以看做单点修改区间查询历史最小值的数据结构题 区间修改单点查询历史版本可以使用二维数据结构维护 由于卡空间,这里只能选择KD树 在KD树上区间修改,历史最值只需要统计单点到根节点的路径上记录的历史最值就行了 关键是这道题如何转化? 我们把询问离线,每一个查询$(l,r)$看做坐标轴上 ...
分类:
其他好文 时间:
2020-05-25 22:30:32
阅读次数:
68
第十五届中北大学算法与程序设计竞赛 C 题意:现在给你n个数的数组,每次可以选择连续的区间操作,可以使得区间内每个数加1或者减去1。问最少多少次之后,可以使得整个数组变成相等的数。 题解:打出差分数组,如果差分数组从第二项开始为0。那么这就是一个相等的数组了。还有一点是,区间修改在差分数组中会变成两 ...
分类:
编程语言 时间:
2020-05-24 20:46:44
阅读次数:
78
很好的题解链接,学到了懒标记和线段树的更容易写的版本。https://llkabs.blog.luogu.org/xian-duan-shu 本题主要解决区间修改,而不是单点修改。 ac代码如下 #include<bits/stdc++.h> using namespace std; typedef ...
分类:
其他好文 时间:
2020-05-16 19:08:30
阅读次数:
49