![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
acm之数据结构
文章平均质量分 69
slmady
学习记录
展开
-
平衡二叉树
平衡二叉树(Balanced Binary Tree)又被称为AVL树。性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树,即平衡因子的绝对值小于1。构造与调整AVL树的方法:红黑树、AVL算法、Treap、伸展树、SBT。原创 2015-04-07 20:29:01 · 431 阅读 · 0 评论 -
poj3107(树的重心)
求树的重心。树的重心是指去掉重心之后剩下的子树的最大结点个数最少树形DP,dp[i]表示以i为重心,剩下的子树的最大结点个数,状态转移dp[i] = max(dp[i], siz[j])。注意用vector超时。代码如下:#include#include#include#include#include#include#include#define N 50005原创 2014-10-03 09:48:28 · 669 阅读 · 0 评论 -
HDU3966(树链剖分(点权)入门)链分治
本人的第二道树链剖分。题意:n个军营,一开始有xi个shib原创 2014-09-30 21:28:18 · 1256 阅读 · 0 评论 -
zoj3686(重新编号的线段树)
题意:一颗n个节点的树,每个点都有一个权值(0或者1),初始化为0,两个操作:1、取反以i为节点的子树的所有点的权值;2、求以i点为根的子树中1的个数。 思路:dfs将所有节点重新编号,然后就是普通的成段更新。原创 2014-11-13 19:16:28 · 533 阅读 · 0 评论 -
csu1329(双向链表)
#include#include#include#include#include#include#include#define N 50005#define LL __int64#define inf 0x3f3f3f3f#define pi acos(-1.0)#define eps 10e-6using namespace std;原创 2014-10-09 00:03:59 · 597 阅读 · 0 评论 -
hdu4288(线段树维护多个sum)
题意:给n个有序的数字,三个操作:1、删除数字x;2、增加数字x;3、求i%5=3的数字之和(i为数字的下标)思路:一开始想水一下,结果超时。先对所有输入的数字离散化,线段树维护区间上点的个数和5个sum值,区间合并的时候要注意:左儿子节点和父亲节点的关系很容易,右儿子合并的时候与左儿子中的点个数有关。代码如下:#include#include#include#include原创 2014-11-08 19:30:19 · 582 阅读 · 0 评论 -
hdu5008(后缀数组求第k小的字串)
题目:求串的第k小的子串。思路分析:串长为100000,时间复杂度应该为O(nlogn),用后缀数组解。这是我的第二道后缀数组题,看了人家代码才写出来的,height数组用的很灵活,每个后缀的所有前缀就是全部的子串,但是有一些是相同的,去重就用到了height数组,对于每一个后缀有n-sa[i]个子串,然后二分定位到串i,第k小的串在后缀i中,然后求出串长,在利用height求最小的l原创 2014-09-16 23:38:02 · 1236 阅读 · 0 评论 -
hdu2604(Trie图的应用)
题意:在串中不能出现fmf和fff。silu原创 2014-09-26 22:33:58 · 541 阅读 · 0 评论 -
hdu4691(后缀数组求最长公共前缀)
xuexhttp://tieba.baidu.com/f?kz=754580296题意:题目的本质就是求输入的相邻的两个串的最长公共字串,有sa来解求得height数组,然后用rmq算法查询。解题思路:sa模板 + ST模板原创 2014-09-15 23:03:19 · 1503 阅读 · 0 评论 -
hdu4970(后缀和,标记法的区间更新)
题意:给定n做塔,每座塔都有一定的攻击范围,原创 2014-08-19 22:50:26 · 693 阅读 · 0 评论 -
hdu4866(函数式线段树)
题意:原创 2014-08-13 21:18:43 · 907 阅读 · 0 评论 -
poj1330(LCA最近公共祖先)
题意:求最近公共祖先思路:之前学习了树链剖分,然后我就用树链剖分的一小部分知识就可以解这个题目了,记录每个结点的fa和depth。然后查找时,每次将depth大的结点往上走直到x = y。代码如下:#include#include#include#include#include#include#include#define N 10005#define inf 0原创 2014-10-03 10:59:25 · 547 阅读 · 0 评论 -
spoj375(树链剖分入门题) 链分治
学习资料:http://blog.sina.com.cn/s/blog_7a1746820100wp67.html原创 2014-09-30 18:21:11 · 995 阅读 · 0 评论 -
hdu5044(树链剖分+标记法实现区间更新)
题意:一颗n个结点的树,两种操作: 1、将u到v之间的结点权值加k;2、将u到v之间的边权加k。输出经过修改后所有的边权和点权。解题思路:做过树链剖分的应该都知道这题肯定是树链剖分题,其实就是一个模板题。但是注意点很多:1、结点有100000个,dfs的时候会爆栈,所以要扩栈; 2、这里的更新操作如果用线段树的update写,时间复杂度O(nlogn),会超时。 这里的成段更新很简单,而且原创 2014-10-03 16:17:33 · 1027 阅读 · 0 评论 -
hdu5091(扫描线+线段树)
题意:给n个点,和长w宽h的矩形,问矩形最多能包含多少个点。思路:扫描线+线段树,首先将坐标转化成非负数,对于每个点(x,y),标记为1,生成一个(x+w,y)的点,标记为-1,然后将y轴建立线段树,维护一个最大值即可。如不不明白的话,画个图,理解一下就好了。原创 2014-11-06 13:53:56 · 1553 阅读 · 0 评论 -
zoj3820(树的直径的应用)
题意:在一颗树上找两个点,使得所有点到选择与其更近的一个点的距离的最大值最小。思路:如果是选择一个点的话,那么点就是直径的中点。现在考虑两个点的情况,先求树的直径,再把直径最中间的边去掉,再求剩下的两个子树中直径的中点。原创 2014-10-20 16:33:09 · 625 阅读 · 0 评论 -
ural1989(字符串hash+线段树)
这题困扰了我一天,在timus上用G++交总是超时,后来改用visual原创 2014-10-31 20:55:33 · 1330 阅读 · 0 评论 -
hdu3518(后缀数组求至少出现两次以上的不可重叠串)
一段时间没学后缀数组,刚开始练sa[]和rank[]的含义都忘记了。题意:给一个长度为n的字符串,问有多少个字符串至少出现2次以上且不重叠。思路:后缀数组解,求后缀数组的时间复杂度nlogn,求答案的时间复杂度为n*n,枚举字符串长度为i个串,利用height数组,求某个连续区间(height[i] >= i)中排在最左边和左右边的sa,然后两个的差值如果大于等于i的话。ans++。原创 2014-11-20 15:08:49 · 653 阅读 · 0 评论 -
hdu5107(线段树处理三维问题)
很不错的一道线段树题,这里的降维方式值得我们学习。题意:已知n个建筑的坐标(x,y)和高度,查询点(x,y)的左下角中高度第k小的建筑的高度。解题思路:坐标加高度相当于是一个三维的题目。首先要发现这里的k非常小,所以我们只要用线段树维护区间内最小的10个建筑的高度。现将查询与建筑一起离散化处理,采用巧妙的降维方式,将x、y、flag(是否为建筑)的优先级排序,y作为线段树下标。原创 2014-11-19 10:44:47 · 1434 阅读 · 0 评论 -
poj2406(连续重复子串)
题意:判断串s是不是str^n,求str的最大长度。解题思路:kmp可解原创 2014-10-17 13:30:24 · 561 阅读 · 0 评论 -
poj1741(点分治)
题意:求一颗树上,两点之间的距离小于k的点对数。本人的第一道树分治,在这里是点分治,道一条路径要么过根结点,要么在一棵子树中,这启发了我们可以使用分治算法。路径在子树中的情况只需递归处理即可,下面我们来分析如何处理路径过根结点的情况。记Depth(i)表示点i到根结点的路径长度,Belong(i) X ( X 为根结点的某个儿子,且结点i 在以X 为根的子树内)。那么我们要统计原创 2014-10-16 17:01:48 · 544 阅读 · 0 评论 -
poj3261(可重复k次的最长子串)
题意:可重复k次的最长子串解题思路:求所有区间[x,x+k-1]中的最小值的最大值。求sa时间复杂度Nlog(N),求最值时间复杂度N*N,但实际复杂度很低。题目数据也比较水,不然估计过不了原创 2014-10-15 12:25:25 · 565 阅读 · 0 评论 -
hdu2296(AC自动机+DP)
题意:构造一个长度为n的字符串,价值最大。思路:比较基础的AC自动机+DP,但是要求记录路径。dp[i][j]表示长度为i,在Trie图中的节点是j的最大价值,用path[i][j]记录路径。状态转移:dp[i][j] - > dp[i+1][从j出发能够到达的点] + val[j]。代码如下:原创 2014-11-18 12:41:46 · 1447 阅读 · 0 评论 -
spoj705( 求不相同的子串个数)
题意:求串s的不同子串的个数解题思路:任何子串都是某个后缀的前缀,对n个后缀排序,求某个后缀的前缀的个数,减去height[i](第i个后缀与第i-1 个后缀有相同的height[i]个前缀)。代码如下:#include#include#include#include#include#include#include#define N 50005#define inf原创 2014-10-15 12:25:21 · 684 阅读 · 0 评论 -
hdu4417(主席树)
题意:求区间中比某个数小的数字有几个思路:离散化,然后用主席树来解jiuk原创 2014-08-11 19:04:29 · 1181 阅读 · 0 评论 -
poj2778(AC自动机+矩阵快速幂)
http://www.cppblog.com/menjitianya/archive/2014/07/10/207604.html上面的题意:给你n个串,求一个长度为m的不包含给定串的串的个数需要的知识点:知道AC自动机和Trie图、矩阵快速幂、m[i][j] = x表示i到j结点有长度为1的路有x条,那么m的n次幂c[][]就表示i到j结点长度为n的路有c[i][j]思路分析:最原创 2014-08-25 09:28:22 · 576 阅读 · 0 评论 -
poj2155(二维树状数组)
学习链接:http://www.java3z.com/cwbwebhome/article/article1/1369.html?id=4804原创 2014-08-05 09:26:30 · 447 阅读 · 0 评论 -
poj2528(离散化+线段树)
题意:在1-10^7的长度上贴海报,求能看到的海报数目解题思路:10^7无论用朴素法或线段树解都会超时超内存,所以要进行离散化。所谓离散化就是把有限的个体映射到有限的空间,以此提高算法的时空效率以这题的测试数据为例,本题的五个区间为1 4,2 6,8 10,3 4,7 10;其中10和4出现了两次,把重复的数字去除,然后排序得1 ,2,3,4,6,7,8,10,与之对应的数组下标为1 2原创 2014-07-14 09:59:32 · 518 阅读 · 0 评论 -
hdu1541(线段树的巧用)
线段树的妙用,求一个序列中的某个数字的前面有几个比它小,朴素算法是O(n*n), 线段树是O(n*logn), 然后再变形下就是答案了下面提供线段树和树状数组的解题代码:原创 2014-08-03 22:35:53 · 601 阅读 · 0 评论 -
hdu2846(字典树好题)
字典树的好题题意:给你n个串,然后又q次询问,输出n个串中包含改串的个数思路:这题非常考验个人的分析能力,最初的想法是用AC自动机或者是后缀数组做,但有感觉不可行,最后看了题解才知道要用字典树首先要注意的是串的长度小于20,这个条件很关键,那么它的子串最多有(20+1)*20/2 约等于200个, 用字典树解,建树的时间复杂度是O(2*10^6)查询的时间复杂度为O(2*10^原创 2014-08-02 22:54:13 · 974 阅读 · 0 评论 -
poj3468(线段树成段更新模板题)
题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]原创 2014-07-22 23:02:52 · 552 阅读 · 0 评论 -
hdu1394(线段树点更新的应用)
这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1)原创 2014-07-21 19:49:42 · 390 阅读 · 0 评论 -
hdu1689(线段树成段更新)
两种操作:1、set区间[a,b]上数字为v;原创 2014-07-21 19:37:23 · 830 阅读 · 0 评论 -
hdu1856(并查集的简单应用)
这算是我第一次自己ac并查集的题目,虽然题目bunan原创 2014-04-26 14:08:34 · 591 阅读 · 0 评论 -
hdu1671( 字典树)
第一次独立些字典树的代码,虽然还是百度了一下下,但是大致思想都已懂了,这是一道很基础的字典树题,代码不是写的很好一开始把题目理解错了 ,wa了好多次代码如下:#include#include#include#include#include#include#include#include#include#include#include#include#defin原创 2014-03-02 00:25:34 · 663 阅读 · 0 评论 -
并查集求连通分量的个数
题目连接:http://acm.hdu.edu.cn/diy/contest_showproblem.php?cid=23144&pid=1001原创 2014-04-24 16:25:24 · 2286 阅读 · 0 评论 -
hdu1251(字典树)
题意:给一本字典,求给定字符串有多少个前缀字典树入门题代码如下:原创 2014-07-14 09:47:53 · 404 阅读 · 0 评论 -
hdu4893(线段树成段更新)
题意:三种操作:1、将第k个数字加上d;2、求区间[a]原创 2014-07-30 20:18:38 · 507 阅读 · 0 评论 -
poj1716(treap树求区间第k小的数字)
由题意知,所给的区间不会出现包含情况treap树求区间第k小的数字,模板题代码如下:原创 2014-08-09 12:46:21 · 821 阅读 · 0 评论 -
poj2104(函数式线段树/主席树)
函数式线段树又称持久化线段树又称主席树原创 2014-08-10 18:44:50 · 874 阅读 · 0 评论