数据结构
小盼你最萌哒
这个作者很懒,什么都没留下…
展开
-
数据结构 并查集 路径压缩
经常会遇到对于给定的n个点,求出他们能否相互连通的问题,常规的做法可能是用二维数组进行标记处理,但是这样的空间使用是O(n^2),当数据量很大的时候,这个消耗是很恐怖的,所以这里我们引入并查集的这种数据结构。树是一种数据结构,它的特点在于所有的点有且仅有一个根节点,如果我们能构造一棵树,并把所有的树按照相互关系装入这棵树,那么他们就是属于一个集合,他们都互相连通的。我们可以用数组来构建这样一个模型。原创 2015-07-30 18:33:34 · 932 阅读 · 1 评论 -
CodeForces 567C Case of Matryoshkas map+递推
原题: http://codeforces.com/contest/556/problem/C题目:Case of Matryoshkas time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output Andrewid the Androi原创 2015-08-06 10:25:55 · 662 阅读 · 0 评论 -
HDU 1556 Color the ball 线段树 区间更新
原题: http://acm.hdu.edu.cn/showproblem.php?pid=1556#include <iostream>#include"cstdio"#include"string.h"using namespace std;const int N= 100005;struct node{ int left; int right; int ad原创 2015-08-12 13:33:44 · 414 阅读 · 0 评论 -
HDU 1394 Minimum Inversion Number 最小逆序数 线段树
原题: http://acm.hdu.edu.cn/showproblem.php?pid=1394题目大意: 求出当前排列的逆序数对数,然后把第一个数移到末尾,再求此排列下的逆序数对数。直到排列变成变成最初。这道题暴力解法是两层for循环进行比较。5000*5000,嗯,虽然不会超时,但是这里更好的方法是用线段树来解答。那么我们线段树的值是存什么呢?如果存最大值然后再比较,看起来不错,但是在数原创 2015-08-03 19:48:06 · 456 阅读 · 0 评论 -
HDU 1754 I Hate It 线段树 最大值 点更新
原题: http://acm.hdu.edu.cn/showproblem.php?pid=1754每次做的时候注意数组大小,还有想清楚查询函数的递归式里为什么不用更新l,r的值。注意递归的终点一定要可预料,否则跳不出递归。#include <iostream>#include"cstdio"#include"string.h"#include"stdlib.h"using namespa原创 2015-07-31 15:24:05 · 357 阅读 · 1 评论 -
HDU 1272 小希的迷宫 并查集
原题: http://acm.hdu.edu.cn/showproblem.php?pid=1272本题需要用到并查集的知识,并且在集合构成的过程中不能出现环路,而且不能有多个集合出现。 0 0也算是满足题意的。参考代码:#include <iostream>#include"cstdio"#include"stdlib.h"#include"string.h"using namespa原创 2015-07-30 16:23:19 · 363 阅读 · 0 评论 -
POJ 3468 A Simple Problem with Integers 线段树 区间更新
原题: http://poj.org/problem?id=3468#include <iostream>#include"cstdio"#include"string.h"using namespace std;typedef long long int lint;const int N= 100005;struct node{ int left; int righ原创 2015-08-12 12:23:14 · 340 阅读 · 0 评论 -
HDU 1166 敌兵布阵 线段树 部分和 点更新
原题: http://acm.hdu.edu.cn/showproblem.php?pid=1166对于这种数据量较大的数组,并且经常对单个点进行更新和修改查询,线段树是一种很好的数据结构。 查询判断的时候注意取等,否则会TLE。 if(tree[id].l>=l&&tree[id].r<=r)建树,查询,更新代码如下:#include <iostream>#include"cstdio"#原创 2015-07-31 14:51:35 · 332 阅读 · 0 评论 -
HDU 2473 Junk-Mail Filter 并查集 删点
原题: http://acm.hdu.edu.cn/showproblem.php?pid=2473题目大意: 对于给定数据,有联系的属于一个集合,也可以将一些点剔出集合,最后共有多少个集合。 相比于上一题,这次多了个删点操作。 这里引入rep数组修改原来删除点的位置。用一个全新的点去代替被删的点,建立新的集合关系。#include <iostream>#include"cstdio"#原创 2015-07-31 11:27:19 · 529 阅读 · 1 评论 -
HDU 2072 单词数 map
原题: http://acm.hdu.edu.cn/showproblem.php?pid=2072这是一道统计题,用map会很简单。 这里先说下map的用法。 首先需要map的头文件:#include"map" 因为这属于STL里面的东西,所以并没有.h。然后我们要定义一个map容器:map<string,int> mp; 就像我们定义的数组一样,可以理解我们的char数组就是map<i原创 2015-08-01 16:54:02 · 309 阅读 · 0 评论 -
HDU 2795 Billboard 线段树 顺序点更新
原题: http://acm.hdu.edu.cn/showproblem.php?pid=2795题目大意: 有规格为h*w的广告牌,有n个高度为1的广告牌,优先从高处放,从左边放,求每个广告牌放的位置,放不了输出-1。这道题可以用线段树来做,把每排当作一个点,存放的是剩下的空间。 但是题目给的范围h、w是10^9,光是初始化就会超时。 细心我们会发现,广告牌最多有n个,即使每排只放一个,原创 2015-07-31 18:52:02 · 398 阅读 · 0 评论 -
数据结构 树状数组
树状数组的作用是求区间和和做点更新。 和线段树相比,线段树和树状数组时间复杂度都是nlogn,但是在空间利用上,我们知道,线段树接近满二叉,需要的空间是4倍N,但是我们树状数组的空间和N相同,而且在代码上有明显的优势。 这里我们先看两幅图: 树状数组就是上面的C[],表示的是下面这些数的和。 这里我们可以看到,所有的奇数位置都会表示它本身,如1,3,5,7……它们只包含自己 所有的2的原创 2015-08-04 10:44:42 · 437 阅读 · 0 评论 -
线段树 区间更新 模版
#include <iostream>#include"cstdio"#include"string.h"using namespace std;const int N= 100005;struct node{ int left; int right; int add; int sum;} tree[N*4];int n,m;int a[N];void原创 2015-08-12 12:18:59 · 503 阅读 · 0 评论 -
HDU 1251 统计难题 字典树
原题: http://acm.hdu.edu.cn/showproblem.php?pid=1251用字典树,对出现过的点+1操作,最后遍历即可求出前缀出现的次数。 交题的时候记得选c++,否则会MLE。#include <iostream>#include"string"#include"stdlib.h"#include"string.h"#include"stdio.h"usin原创 2015-08-01 15:24:31 · 331 阅读 · 0 评论