随笔分类 - Data Structure
摘要:一、左偏树能做什么? **左偏树(Leftist Tree)是一种维护可并堆(Mergeable Heap)**的数据结构。 可并堆是一种抽象数据结构(Abstract Data Type, ADT),在普通的**堆(Heap)**的基础上,增添了 upd 操作,使得两个堆可以合并。这也是其名之来历
阅读全文
摘要:例题:区间加,区间查询 下文使用 \(m\) 表示查询次数,以示区分。 朴素做法 \(O(m\times n)\). 我们发现需要优化后面这个 \(n\). 考虑分块。将整个区间打成 \(\lceil n / \sqrt{n} \rceil\) 块。 称有 \(\sqrt{n}\) 个数于其中的块为
阅读全文
摘要:AcWing 246. 区间最大公约数 题意简述:区间加,区间 gcd. 解: 根据更相减损术,有 \(\gcd(x,y)=\gcd(x,y-x)\). 一般地,有 \(\mathbf{\gcd(a_1,a_2,\cdots,a_n)=\gcd(a_1,a_2-a_1,\cdots,a_n-a_{n
阅读全文
摘要:做这道题需要知道一个性质:树上 \(x,y\) 两点的距离为 \(dis(x)+dis(y)-2dis(LCA(x,y))\),其中 \(dis(i)\) 表示 \(i\) 点离根节点的距离,\(LCA(i,j)\) 表示 \(i,j\) 两点的 LCA(最近公共祖先)。 然后就直接水过去了。在预处
阅读全文
摘要:前言 本题是一道哈希表的模板题。然而当时的 data maker 竟然连直接开桶的做法都没有卡掉... 于是在 Luogu 上,很长一段时间之内,这道题的最优解一直是这个错解。 而且,虽然题面上写着给出的数在 32 位有符号整数范围内,但是 data maker 也没有出出来负数...导致一些错误的
阅读全文
摘要:这道题显然可以直接模拟前 \(I\) 个小球的掉落,最终即可得解.但是,很明显,这么做会使时间复杂度直接爆炸成 \(O(l\times D\times I)\),已然是力不从心. 仔细观察,可以简单地发现:我们只需模拟第 \(I\) 个小球的运动即可,通过判断当前节点上已经经过了的小球数的奇偶性,可
阅读全文
摘要:题目大意: 给定一个数列 \({a_n},a_0=1,a_{i+1}=(A\times a_i+a_i\bmod B)\bmod C\),求这个数列第一次出现重复的项的标号。 Sol: 哈希表模板题。 模数随便设,$2000003$ 实际效果比较好,跑得挺快。 每次计算一下数列里新的项的值,插入到哈
阅读全文
摘要:Link 有句话说的好啊,树的题不一定要把树建出来 这题就是这样 这题直接在读入后, 写个递归函数用于二分查找, 然后,, 就没了。。 (貌似太口胡了吧) \(\rm code\) # include <bits/stdc++.h> using namespace std; const int ma
阅读全文
摘要:这个题看上去很有高论,但其实没有那么复杂。只需要分别模拟队列、栈、大根堆和小根堆的处理过程即可。 细节和注释都在代码里了。 $ \rm code $
阅读全文
摘要:题目地址: $Luogu$:https://www.luogu.org/problemnew/show/P3378 那么我们一看到题目应该就会写这道题了吧。 我们需要支持三个操作: 1、插入一个数入小根堆。 2、输出小根堆的最小值。 3、删除小根堆的最小值。 由于我们知道,小根堆的最小值就是它的根,
阅读全文
摘要:下文摘自百度百科~~ 队列同样也是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。 队列的数据元素又称为队列元素。在队列中插入一个队列元素称为
阅读全文
摘要:下文摘自百度百科~~栈(stack)又名堆栈,它是一种特殊的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素
阅读全文
摘要:题目描述 一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值。若前面的数不足m项则从第1个数开始,若前面没有数则输出0。 输入输出格式 输入格式: 第一行两个数n,m。 第二行,n个正整数,为所给定的数列。 输出格式: n行,第i行的一个数ai,为所求序列中第i个
阅读全文

浙公网安备 33010602011771号