数据结构
lbrony
这个作者很懒,什么都没留下…
展开
-
线段树
下面是一棵支持区间加和区间乘的线段树。写线段树时应注意递归时下传的左右边界是否与目标节点符合,判断是否进行递归时所用的左右节点是否误用了当前节点的左右边界(而不是使用正确的目标区间左右边界)#include<cstdio>#define ll long longusing namespace std;const ll maxn=2e5+5;ll c,n,m,p,x,y,z,...原创 2019-10-23 16:53:26 · 108 阅读 · 0 评论 -
树链剖分
//不要忘记取模!!!#include<cstdio>#define ll long longusing namespace std;const ll maxn=2e5+5;ll n,m,r,p,a[maxn],x,y,z;ll d[maxn],f[maxn],top[maxn],id[maxn],ws[maxn],size[maxn],dfc,wi[maxn];//树链剖...原创 2019-08-01 20:20:41 · 87 阅读 · 0 评论 -
树状数组
树状数组是一种特殊的树,主要用来维护有前缀和性质的序列,可以在O(logn)O(logn)O(logn)内完成单点添加和查询的任务,其基本操作是lowbit运算lowbitlowbit运算的定义是求出数字在二进制下最低位的1所表示的位权。以计算机的角度看,lowbit(x)=x&(-x);计算机内部采用补码来存储数,正整数的补码是其二进制表示不变,负整数的表示是其二进制表示按位取反...原创 2019-08-06 11:47:21 · 66 阅读 · 0 评论 -
ST表
st表是处理区间最大值的得力工具,它基于倍增思想,对一定长度的区间最大值进行维护。具体来说,我们建立st表 st[i][j]st[i][j]st[i][j],保存从第iii位开始的2j2^j2j个数中的最大值。其思想与线段树相似,高一级的“节点”储存了下级节点的信息和。由st表定义可知,st[i][0]=a[i]st[i][0]=a[i]st[i][0]=a[i](a[i]为原数组)。根据“高一...原创 2019-09-09 13:20:57 · 178 阅读 · 0 评论