![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 68
FBI-PC
这个作者很懒,什么都没留下…
展开
-
关于c语言链表的操作
链表原创 2014-05-05 19:44:46 · 1120 阅读 · 0 评论 -
数据结构实验2 一元多项式的合并
写一元多项式的合并 代码如下#include#include#includeusing namespace std;typedef struct node{ int xs,zs; struct node *next;}node,*listnode;void creatlist(listnode &head){ int x=1,z; lis原创 2014-11-20 21:16:28 · 2516 阅读 · 0 评论 -
poj2481 cows(线段树单点更新)
题目链接:huangjing题目意思:给出n头牛的活动区间,比如区间[SI,sj]和[EI,EJ],如果前面一个区间完全包含另外一个区间那么说明前一头牛比后一头牛强壮。思路:根据区间的右区间数来建树,然后用sum[]来维护牛在这些右区间的头数。首先要根据牛的区间顺序进行排序,当然从左像右排序,那么后面进行查询比自己强的牛的时候那么就只用找右区间比自己大的就可以了。那么如何更新呢原创 2014-10-19 22:32:05 · 988 阅读 · 0 评论 -
hdu5107 K-short Problem(线段树+离散化+思维)
题目链接:huangjing题意:就是给出狠点建筑的坐标和高度,然后给出很多询问,求在这个坐标右下角的第k矮的建筑。。思路:太弱了我,这个题目从上个星期天就开始看,但是一直不会,所以只能看别人思路,因为那个k小于10,所以左右节点只取前十就可以了,但是我觉得万一不记录完全万一发生丢失怎么办,后来一想sb了,如果左右节点都取前10的话,那么根节点得到的20个值,在排序必定取到了前10原创 2014-11-22 11:24:47 · 1175 阅读 · 0 评论 -
hdu1556 Color the ball(线段树区间更新)
题目链接:huangjing题意:给出一些染色操作,问最后每个球被染色几次。。。思路:每个节点代表的意思是区间的点被染色几次,那么就不用push_up了,那么只需要lazy一下就可以了,然后最后区间查询,练一下手。。题目:Color the ballTime Limit: 9000/3000 MS (Java/Others) Memory Limit: 3原创 2014-11-27 12:38:09 · 689 阅读 · 0 评论 -
hdu 5199 Gunner
题意:给了两个集合A,B,然后求集合A中的元素在集合B中出现的次数,当然如果有两个相同的询问,那么后一个询问为0。。有两种解法。解法一:Hash 因为这是典型的给两个集合,然后直接求一个集合在另外一个集合中是存在。。。所以一直用模素数的方法解决冲突。解法二:两次二分,然后算中间的差值,那么就是出现的次数,这也是那篇论文里面的解法 二分。。。题目:GunnerTime原创 2015-04-09 19:24:34 · 837 阅读 · 0 评论 -
单调栈
通过一个例子,简要证明一下单调栈 。 poj2796单调栈 就是维护一个栈使这个栈里面的元素是单调递增还是单调递减的!!!那么用一个题目来理解一下他的原理。 这个题的意思就是说在一个[L,R]区间内,存在一个最小的数,其余的数都比它大。然后求max(这个区间的和*最小的数)。首先维护一个单调递增的栈。设处在当前栈顶的元素为x,扫面到的当前元素为i,那么首先可以判断的原创 2015-05-11 21:52:31 · 759 阅读 · 0 评论 -
表达式求值(数据结构书上栈的应用之一)
主要内容:表达式求值,提交nyoj通过。。。思路:主要就是一个开两个栈,然后一个操作符栈,一个操作数栈。。我的代码如下(比较简洁):#include#include#include#include#include#include#include#include#include#include#def原创 2014-10-09 19:11:01 · 1028 阅读 · 0 评论 -
堆排序
堆排序是一种比较常见的排序方法。 最重要的是建立初始堆的过程。然后一次调整会有一个最大值,那么和尾元素对调,那么堆失去平衡,重新进行调整,其实调整的时候因为是在已经建好的堆上进行调整,所以每次只需要调整a[0]元素即可。 代码:#include<iostream>#include<cstdio>#include<cstring>using na...原创 2018-05-13 16:08:54 · 103 阅读 · 0 评论 -
Leetcode_36. Valid Sudoku
题目:Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:Each row must contain the digits 1-9 without repetition.Each column must c...原创 2018-08-12 10:27:09 · 102 阅读 · 0 评论 -
二叉搜索树的相关操作
二叉搜索树是一些AVL,RB-tree等的基础,所以了解二叉搜索树的基本操作很重要。定义:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。这里给出自己画的一个二叉树,不知道有啥好的画图软件首先我们得知道如何验证是否是一颗标准的二叉树,中序遍历,中序遍历的二叉搜索树肯定死有序的...原创 2018-09-19 20:14:49 · 163 阅读 · 0 评论 -
手写快速排序和归并排序
排序应该是基础,要经常写,熟练使用递归。方法贴在这里,以后时刻温习#include<cstdio>void quicksort(int a[],int low,int high){ if(low>=high) return; int key = a[low]; int first = low; int last = high; while(first<la原创 2017-12-26 20:54:08 · 712 阅读 · 0 评论 -
二叉树的遍历方式及实现
前序遍历若树为空,则空操作返回。否则,先访问根节点,然后前序遍历左子树,再前序遍历右子树。(中 左 右)实现(递归)void preOrder(Node *node){ if(node){ std::cout<<node->value; preOrder(node->left); preOrder(node-&...原创 2019-03-08 20:14:15 · 230 阅读 · 0 评论 -
前序遍历(或后序遍历)和中序遍历还原二叉树
前序遍历+中序遍历构建二叉树1、前序遍历的第一个元素A,为根结点2、在中序遍历找到A,则在中序遍历中A左边是左子树,右边是右子树3、递归(左右子树同样如此)具体实现/* * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeN...原创 2019-03-08 20:29:24 · 385 阅读 · 0 评论 -
CodeForces 19D Points(离散化+线段树+单点更新)
题目链接:huangjing题意:给了三种操作1:add(x,y)将这个点加入二维坐标系2:remove(x,y)将这个点从二维坐标系移除。3:find(x,y)就是找到在(x,y)右上方的第一个点。思路:我们可以建立n个set以x为横坐标,那么我们这个题就转化为找一个最小的x是否存在满足条件,那么x一旦被找到,那么纵坐标就自然而然的找到了,当然更新操作就是对maxy的原创 2014-10-17 07:48:45 · 972 阅读 · 0 评论 -
二叉树的有趣问题
近期看了一下hihocoder,那里面有一个很有趣的题目,就是给出二叉树的前序遍历结果,然后给出中续遍历的结果,最后求出后续遍历的结果,我觉得这个题目很有趣,然后刚好那里有提示,先给出一个图吧那么这个图的前序遍历(TLR)结果是ABDEGHCFIJ 中续遍历(LTR)结果是 DBGEHACIJF后续遍历(LRT)得到的结果DGHEBJIFCA因为前序访问得到的原创 2014-11-15 21:24:01 · 1100 阅读 · 0 评论 -
约瑟夫问题
约瑟夫经典问题原创 2014-05-06 22:04:28 · 747 阅读 · 0 评论 -
hdu2759
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795题目:BillboardTime Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 9562 Accepted原创 2014-07-02 23:25:33 · 994 阅读 · 0 评论 -
poj3468A Simple Problem with Integers(线段树+成段更新)
题目链接:huangjing题意:给n个数,然后有两种操作。【1】Q a b 询问a到b区间的和。【2】C a b c将区间a到b的值都增加c。思路:线段树成段更新的入门题目。。学会使用lazy即可。还需要注意的是,lazy的时候更改是累加,而不是直接修改。。有可能连续几次进行修改操作。。注意这一点就好了。。。题目:Language:De原创 2014-08-30 21:20:35 · 1420 阅读 · 0 评论 -
hdu1394 Minimum Inversion Number(线段树单点更新||暴力)
题目链接:huangjing这个题目暴力和线段树都可以过,但是都需要掌握一个规律。。当队首元素移到队尾后,可定会减少a[i]个逆序对,然后增加n-1-a[i]个逆序对。你看比如1移到队尾,那么1>0这个逆序对就会减少,2>1,3>1,4>1这些逆序对就会增加。。所以发现这个规律就好做了。。暴力做法就是直接那样模拟。。线段树做法是首先建立一颗空树,然后插入之前原创 2014-09-01 09:23:13 · 868 阅读 · 0 评论 -
hdu5023A Corrupt Mayor's Performance Art(线段树+位运算) poj 2777Count Color(线段树+位运算)
题目链接:huangjing题意:有一快板子,然后这个板子被分为从1到n小块,然后给了m个操作,p a b c,是将板子a,b涂成c种颜色,q a b是询问这a到b快板子中有多少种颜色。。思路:这个是典型的区间更新,然后涂颜色涉及到位运算,将每一种颜色表示数的各个位,那么这个问题就简单了,,但是我还是一直wa到死,因为我开了一个fbi数组保存结果,结果我把fbi数组开到ma原创 2014-09-23 16:32:49 · 958 阅读 · 0 评论 -
链表的逆置(无聊而写)
要求:就是建一个带一个头结点的链表,然后将链表逆置即可。。。主要就是讲插入方式变一下即可。。代码:#include#include#include#include#include#include#include#include#include#define eps 1e-9#define ll long long#define INF 0x3f3f3f3fusing原创 2014-09-29 23:54:05 · 878 阅读 · 0 评论 -
二叉树的建立及递归遍历
huangjing二叉树的的建立方式为前序 二叉树有三种遍历 前序遍历(NLR) 中序遍历(LNR) 后续遍历(LRN)代码为:#include#include#include#include#include#include#include#include#include#include#define eps 1e-9#define ll long lon原创 2014-11-12 22:46:24 · 983 阅读 · 0 评论 -
poj2828 buy tickets(线段树单点更新)
题目链接:huangjing思路:因为给出了n条插入,所以如果正推的话,那么后面插的会影响到最后所在的位置,所以考虑逆序解决,那么如果此人站在第i个人的位置,那么这个人前面必然有i个空位置没占,因为是从后向前考虑的,所以每次更新的时候就要考虑在前面存在i个空位的位置后插入这个人,那么最后得到的序列就是满足条件的。。题目:Language:Defaul原创 2014-10-10 11:02:54 · 900 阅读 · 0 评论 -
矩阵转置
一般的矩阵专职算法复杂富为哦(原创 2014-10-27 22:57:18 · 871 阅读 · 0 评论 -
数据结构实验(保存起来过两天写实验报告) 链表的合并
huangjing链表的合并,要求O(la*lb)的复杂度,实际上就是插入什么的,注意如果在链表开头和结尾的特殊情况代码#include#include#includetypedef struct node{ int data; struct node *next;}Node,*listnode;int lena,lenb;void creatlist(list原创 2014-11-15 12:01:01 · 2017 阅读 · 0 评论 -
hdu4521 小明系列问题——小明序列(LIS变种 (线段树+单点更新解法))
链接:huangjing题目:中文题目 思路:这个题目如果去掉那个距离大于d的条件,那么必然是一个普通的LIS,但是加上那个条件后就变得复杂了。用dp的解法没有看懂,我用的线段树的解法。。。就是采用延迟更新的做法,用为距离要大于d啊,所以我们在循环到第i的时候,就对(i-d-1)这个点进行更新,因为如果在(i-d-1)这个点更新了,会对后面的造成影响,然后线段树的tree【】数原创 2014-10-24 23:15:37 · 1419 阅读 · 0 评论 -
hdu4288 Coder(线段树+离散化)
题目链接:huangjing题意:题目中给了三个操作1:add x 就是把x插进去 2:delete x 就是把x删除3:sum 就是求下标%5=3的元素的和。还有一个条件是插入和删除最后都要保证数列有序。。。首先告诉一种暴力的写法。。因为时间非常充足,需要对stl里面的函数有所了解。。就是直接申明一个vector的容器,然后直接用vector里面的操作比如原创 2014-10-13 22:30:19 · 1034 阅读 · 0 评论 -
hihocoder第16周(RMQ-ST算法)
题目链接:huangjing思路:新学会的一种算法,RMQ(Rangle Minimum Query)从名字来看,觉得就是查询最小值的,哈哈,大白上有仔细的讲解。dp[i][j]=min(dp[i][j-1],dp[i+(1预处理的复杂度为O(N*logN),查询就是O(1)的复杂度。方法二:线段树解法 复杂度为O(Q*logN).题目:题目1 : R原创 2014-11-11 21:19:39 · 1062 阅读 · 0 评论 -
递归、回溯、DFS和BFS总结
递归和回溯递归递归是指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象。运用递归的条件:1. 子问题须与原始问题为同样的事,且更为简单;2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。回溯回溯也称试探法,它的基本思想是:从问题的某一种状态(初始状态)出发,搜索从这种状态出发所能达到的所有“状态”,当一条路走到“尽头”的时候(不能再前进),再后退一步或若干...原创 2019-03-08 09:30:39 · 2770 阅读 · 0 评论