数据结构
罗马字母3
这个作者很懒,什么都没留下…
展开
-
线段树(区间求和、插入、查询最大最小值)-- 模板
题目: 给你一个数组A[1::n],初始时每个元素都为零。对数组完成一些操作: 第一种可能,给你两个数p 和x(1<= p <= n),把数组的第p 个元素替换为x,即A[p] =x. 第二种可能,给你两个数L 和R(1 <=L <= R <= n),请给出A[L]; A[L + 1]; : : : ; A[R] 这几个数中去掉一个最大值和一个最小值后剩下的数的...原创 2018-06-08 12:55:18 · 530 阅读 · 0 评论 -
数状数组 及其在 求逆序对中的应用
讲解链接如果树状数组维护的是a数组的值,那么 sum[i] 表示在 a 数列1~i中的元素的和 查询(l,r)中元素的和就为 sum(r)-sum(l)逆序对的定义: i < j && a[i] > a[j] 例题中的逆序对: pre[i]为1~i中a[i]的个数; nex[i]为i~n中a[i]的个数 这时候的逆序对就是,i < j...原创 2018-07-19 22:25:09 · 170 阅读 · 0 评论 -
区间分块系列
转自:http://hzwer.com/8053.html 很好的分块知识讲解。可能涉及的几个词语解释: 区间:数列中连续一段的元素 区间操作:将某个区间[a,b]的所有元素进行某种改动的操作 块:我们将数列划分成若干个不相交的区间,每个区间称为一个块 整块:在一个区间操作时,完整包含于区间的块 不完整的块:在一个区间操作时,只有部分包含于区间的块,即区间左右端点所在的两个块例...转载 2018-06-08 12:53:41 · 567 阅读 · 0 评论 -
吃瓜题2(虚拟分类并查集+启发式合并)
题意: 与吃瓜题1题意一致,只是西瓜的种类从两种变成了无数种。题解: 在吃瓜题1里,由于只有两类西瓜,因此我们可以使用分类的方法来表示异同。而在这题中,由于种类数无穷,我们只有记录每个节点的对立节点,在询问x与y的关系时,我们查询x的对立节点集合中是否出现y节点。 那么如何记录对立节点集呢?我们采用set当两个节点确定异种的时候,我们分别在set[x]和set[y]中添加y和x 当...原创 2018-06-08 12:54:05 · 108 阅读 · 0 评论 -
吃瓜题1(虚拟分类并查集)
题意: 只有两种西瓜,给出一系列信息——两个西瓜同种或异种,询问某两个西瓜的关系。题解: 对于每个节点建立对立节点。 约束关系: A、B相同:使用并查集合并(A、B),合并 (对立A、对立B) A、B不同:使用并查集合并(A、对立B),合并( B、对立A)若节点x与节点y在同一并查集中,输出1; 若节点x与y的对立节点在同一个并查集中:输出2; 否则,不能确定关系,输出3....原创 2018-06-08 12:54:24 · 96 阅读 · 0 评论 -
POJ1182(带权并查集)
题意: 给出类似剪刀石头布的相互克制关系,看是否有矛盾条件出现。经典题目,根据poj 1182“食物链”改编。题解: 题面描述了一些生物之间的关系,不难会想到并查集。 但是生物关系不是确定的,所以要在描述关系的集合当中加入一些额外的参数。 因为只有三种生物,所以我们定义: 当sett[x]=y的情况下(即x与y有关系): val[x]==val[y]相等说明x和y是同类 (val...原创 2018-06-08 12:54:36 · 159 阅读 · 0 评论 -
并查集(带计数)-- 模板
题意: 在另一个宇宙,一个月有 N 天。多变的天气条件使得人们很恼火,终于,天气统计局产生了。它会对外发布 M 条信息,格式如下: X Y 表示第 X 天的天气和第 Y 天一样。但民众并不满足于此,他们想知道有多少天的天气和第 X 天一样。 现在,作为一个聪明的程序员,你能帮他们解决这个问题吗?题解: 给并查集加上计数功能#include&amp;lt;cstdio&amp;gt;using...原创 2018-06-08 12:54:46 · 492 阅读 · 0 评论 -
哈夫曼树(队列实现)
题意: 分析: 哈夫曼树 给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。对于一颗哈夫曼树,我们把所有节点排序,权值大的必定层数较低,f[i][j]代表已经放了i-1个叶子节点,正准备放置Ai,该层还有j个空节点,我们可以选择在空节点上...原创 2018-06-08 12:54:58 · 774 阅读 · 0 评论 -
线段树(lazy标记)-- 模板
题意: 一个数组A[1::n],初始值全为0,m 个操作: 1. 使区间[L; R] 内每个数都加上v 2. 查询区间[L; R] 内所有数的和 数据范围: 1 &lt;= n &lt;= 106, 1 &lt;= m &lt;= 106, |v| &lt;=1e3 时限4 秒 题解: 区间修改(带lazy 标记)、区间查询的线段树可以在O(log n)的时间内维护区间的和. 此...原创 2018-06-08 12:55:08 · 1281 阅读 · 0 评论 -
RMQ模板
int d_min[maxn][maxm], d_max[maxn][maxm];//值int minpos[maxn][maxm], maxpos[maxn][maxm];//下标//预处理区间最大最小值void RMQ_init(int n){ int i, j; for (i = 1; i <= n; i++){ d_min[i][0] = a...转载 2018-07-28 00:25:23 · 308 阅读 · 1 评论