
数据结构
文章平均质量分 65
ShadowGhostH
这个作者很懒,什么都没留下…
展开
-
RMQ区间查询
之前写线段树的时候,update总是写不好,一直用的结构体指针建树或者是数组建树却不够熟练总是写错还费时间。之前在做一道cf的题时发现了这个很清楚的算法,直接就拿来用了,虽然读错题意(没错就是那个阅读理解场!)最后重写了一遍没再用到。可是今天有研究了研究这个算法觉得还是很有学习价值的。const int maxn = 5e4+10;int dp[maxn][20];int mm[maxn];...原创 2018-03-12 12:52:19 · 225 阅读 · 0 评论 -
SPOJ COT 树上简单路区间第k大(主席树 + lca)
题目题意给出一棵 nnn 个节点的数,每个节点有一个权值。之后有 mmm 次询问,每次询问 u,v,ku, v, ku,v,k 表示,树上 uuu 到 kkk 的简单路径上,第 kkk 大的权值是多少思路一道图论+数据结构的特别有意思的题目,充分利用了主席树可减的特点。我们查询简单路径 (u,v)(u, v)(u,v) 时,可以通过 dfsdfsdfs 序建立主席树。而路径路径上的信息就是...原创 2019-03-21 11:49:09 · 342 阅读 · 0 评论 -
hdu 6464 (splay)(离线+离散化+权值线段树)
题目题意操作 111 每次可以加入 xxx 个 yyy,操作 222 查询第 xxx 大的数到第 yyy 大的数的区间和思路splay动态加点,查询第 xxx 大和第 yyy 大的元素后,通过旋转操作放在一个子树当中,很快的求出区间和,不需要离散化,操作略复杂离线+离散化+权值线段树通过离线可以把 1e91e91e9 的数据离散化到 1e51e51e5 的区间中,得到了这种映射关系之...原创 2019-03-19 21:05:37 · 276 阅读 · 0 评论 -
POJ 2104 区间第k大 主席树(模板)
题目题意查询区间范围内,第 kkk 大的数思路按照数列顺序依次加入,构建可持久化线段树(主席树),由于线段树的可减性,能够得到对应区间范围内的线段树主席树的模板题了代码int cnt, root[maxn], a[maxn];struct Node{ int l, r, sum;}T[maxn*40];vector<int> v;int getid(i...原创 2019-03-19 17:50:32 · 254 阅读 · 0 评论 -
BZOJ 3224 普通平衡树(splay 模板)
题目题意中文体面,题意就不写了思路splaysplaysplay 模板题,实现插入、删除、查询等操作代码int ch[maxn][2], pre[maxn], val[maxn], size[maxn], num[maxn];int root, tot;void print(int now){ // printf(&quot;%d: ls:%d rs:%d num:%d minn:%d ...原创 2018-11-01 14:46:37 · 206 阅读 · 0 评论 -
HDU 6406 Taotao Picks Apples (线段树)
题目题意给出 nnn 个数,规定一个取数规则,从左至右,先取第一个数,之后每次遇到比上一个所取数字大的数,就必须取。给出 mmm 次询问,每次询问给出一个位置 xxx 和值 hhh,代表将位置 xxx 上的数字改为 hhh,问此时按照取数规则能取到多少个数。每次询问都是独立的。分析题目其实是找数列中的严格上升子序列,但是由于见到大的数就必须选,所以这个子序列是唯一的。难点在于mmm 次独立...原创 2018-10-10 10:20:14 · 178 阅读 · 0 评论 -
CodeForces - 280D k-Maximum Subsequence Sum(区间最大k段和)(线段树 + 最大子段和 + 区间修改 + 区间查询 + 单点修改)
题目题意给定nnn个数的序列,定义两个操作 ⋅0kval⋅0kval\cdot \quad 0\; k\; val 把序列第k个数的值变为val ⋅1lrk⋅1lrk\cdot \quad 1\; l\; r\; k 询问在区间 Al⋯ArAl⋯ArA_l\cdots A_r 中,选取 mmm 段不相交的子区间,使得这 mmm 段子区间的和最大,其中0≤m≤k0≤m≤k0\leq...原创 2018-09-07 17:39:54 · 1328 阅读 · 0 评论 -
ACM-ICPC 2018 徐州赛区网络预赛 G (离散化 + 树状数组 + 区间最大值 + 模拟)
G题意按照顺序往坐标系的第一象限放矩形,其中矩形的一个顶点和原点重合。数据中给出矩形右上方顶点的位置 (x,y)(x,y)\left(x, y \right)。已知后放上的矩形会覆盖之前的矩形,问,露出来的边界的总长度是多少(不计坐标轴)(依然是来自于队友的翻译,看看题会比较好理解)思路由于题目给出,矩形不会完全覆盖,所以对于任意两个矩形的右上顶点(xi,yi)(xi,yi)\...原创 2018-09-11 16:23:16 · 192 阅读 · 0 评论 -
SPOJ GSS1 (区间最大子段和)(线段树)
想要补camp里的那道区间最大k子段和,结果发现自己连怎么求区间最大字段和都不会。。。菜是原罪,于是找了GSS来补一下(虽然我连GSS是什么都不知道hhh题目题意给一个长度为nnn的序列,mmm次查询,每次查询一个区间[l,r][l,r][l,r]中的最大子段和(要求为连续子序列)。思路对于一个固定区间,求最大子段和我们有O(n)O(n)O\left(n\right)的...原创 2018-08-12 22:38:08 · 1144 阅读 · 0 评论 -
Codeforces Round #FF (Div. 1) C (Segment_Tree)
题目题意给定一个长度为n的序列,对序列定义两种操作: (1,l,r)(1,l,r)(1,\, l,\, r) 在对应[l,r][l,r][l,\, r] 的区间上,对ai+Fi−l+1ai+Fi−l+1a_i + F_{i-l+1}其中i∈[l,r]&amp;amp;nbsp;Fii∈[l,r]&amp;amp;nbsp;Fii\in[l,\, r]\ F_i为斐波那契数列的第iii项。其中F1=1F2=1Fn=F...原创 2018-08-12 17:23:41 · 236 阅读 · 0 评论 -
线段树模板
贴一个自己实现线段树单点修改,区间查询,区间修改的模板struct Node{ int l, r; int sum, minn, maxx; //特征值 int lazy;}tree[maxn&amp;amp;lt;&amp;amp;lt;2]; //开四倍空间int num[maxn]; //数值数组void build(i...原创 2018-08-11 22:41:08 · 451 阅读 · 0 评论 -
SPOJ GSS4 (区间开根号 + 区间查询) (线段树)
题目这个题目camp里面有讲过,用到的是BOZJ 3211题意对于给定的,n个数的序列,我们定义两个操作,分别是区间开根号以及区间求和。共有m次查询 其中n,m≤1e5,∑ni=1ai≤1e18n,m≤1e5,∑i=1nai≤1e18n ,\; m\leq 1e5,\; \sum_{i=1}^n a_i \leq1e18思路我们可以简单的计算一下,一个1e181e181e...原创 2018-08-14 23:16:54 · 1158 阅读 · 0 评论 -
SPOJ GSS3 (区间最大子段和 + 单点更新) (线段树)
题目思路详细思路移步GSS1这里只是加入了一个单点更新得操作,找到要更新得顶点,然后把它更改,再递归调用回溯的时候维护区间特征值 EndEndEnd代码struct Node{ int l, r; int sum, maxs, maxl, maxr; //区间和, 区间最大子段和, 最大前缀和, 最大后缀和}tree[maxn<<2];...原创 2018-08-14 19:57:29 · 818 阅读 · 0 评论 -
主席树 总结
主席树(总结主要是为了给自己看,了解用法,主席树的基本原理和写法请出门左转dalao多多)思路在之前写博客的时候曾经说了一句,【线段树的可减性】,用这句话来解释线段树的原理。在之后的学习过程中发现这句话不太准确。主席树即可持久化线段树,它可以记录对线段树修改过程中,每一次修改时的状态,方便之后回退回当前状态。而同时,对于每一次修改,我们通过节点的重用,尽可能得减少空间开销,因为在单点修改时...原创 2019-03-25 10:48:20 · 279 阅读 · 0 评论