![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
algorithm_数据结构
文章平均质量分 73
theArcticOcean
Website: https://www.weiy.city
Wechat Subscription Account: 胡桃小院
展开
-
hdu 1698 Just a Hook(线段树区间更新·经典)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1698 数据:case,n,q,q行x,y,z。在长度为n的hook上进行q次区间更新,把它们的价值改变。最后统计总的价值。x,y,z分别表示把[x,y]内的hook变成价值为z的hook。原创 2015-08-07 22:29:13 · 578 阅读 · 0 评论 -
hdu 1237 简单计算器(数组模拟栈,队列)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1237 简单计算器 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 15248 Accepted Submission(s): 5原创 2015-09-06 10:01:52 · 723 阅读 · 0 评论 -
codeforces 301D. Yaroslav and Divisors(遍历和排序的艺术)
http://codeforces.com/problemset/problem/301/D 大意:给定一串数字,然后有m个询问,每一个询问问从l到r一共有多少对整除关系? 一个数i的在1——n内的倍数的个数是 n/i 那么,1-i的倍数个数有: f(1,i)=n/1+n/2+n/3+……+n/i 1-i在k内的倍数个数有:g(1,i,k)=k/1+k/2+k/3+……+k/i L-原创 2015-12-23 23:53:59 · 970 阅读 · 0 评论 -
求解逆波兰表达式的值,回文数字的判断&&栈的应用
常规数学表达式的前缀表达式称为波兰表示式,后缀表达式又称逆波兰表达式。对于逆波兰表达式的求解可借助于栈,把数字全部压入栈中,遇到计算符号再弹出两个数,计算结果压入栈中,重复这个过程,最后的数字就是计算结果。 例子: 3-(4+8/2)*3=-21 48/3+12-6*2+7=23 输入文件内容: 3 4 8 2 / + 3 * - EOF 48 3 / 12 + 6 2 * - 7原创 2015-06-21 15:30:48 · 828 阅读 · 0 评论 -
哈夫曼树构造及编码
哈夫曼树: 树的带权路径长度是树中所有叶子结点的带权路径长度之和。一组具有确定权值的叶结点可以构成多个带权二叉树。带权路径长度最小的二叉树就称作最优二叉树,或者哈夫曼树。通过实践可以发现,哈夫曼树总是把权值大的叶结点放在靠近根结点的地方,权值小的结点放在深度大的地方。哈夫曼算法给出了构造哈夫曼树的基本思想: 1.给出n个权值各异的结点作为n颗二叉树的根结点,左右子树均空,组成二叉树集合F;原创 2015-06-22 23:42:20 · 5073 阅读 · 0 评论 -
set四个集合操作&&红黑树初识
了解红黑树: 首先说说二叉查找树。二叉查找树的重要性质:任何节点的键值一定大于其左子树中每一个节点的键值,并小于其右子树中每一个节点的键值。在极端情况下,当所有节点位于一条链上时,二叉查找树的操作时间为O(N)。沿树的左边向下走,能够找到最小值。沿着树的右边走能够找到最大值。 和二叉搜索树一样,红黑树(一种特殊的二叉查找树)可以支持search,minimum,maximun,insert,d原创 2015-07-20 19:54:55 · 1008 阅读 · 0 评论 -
二叉树的四种遍历
二叉树的遍历:前序遍历,中序遍历,后序遍历,层次遍历。不同的遍历方式有时是解决某些问题的有效工具,比如一个计算表达式以中序存储在二叉树中,用前序遍历可以得到前缀表达式(波兰表达式),后序遍历可以得到后缀表达式(逆波兰表达式)。而最能直观展现树的二维图形的遍历则是层次遍历。下面是自己的实现代码: //存储的二叉树: /* 1 2 3 4原创 2015-06-21 20:19:26 · 751 阅读 · 0 评论 -
约瑟夫环
问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后[1] 结果+1即为原问题的解。 用循环链表来模拟解决,思路简单: #include #include using namespace原创 2015-09-16 21:02:49 · 484 阅读 · 0 评论 -
树状数组求解逆序数
数列的逆序数可以使用归并排序求解,亦可以使用树状数组解决。现在献上两题,用树状数组求解逆序数。 POj 2299 Ultra-QuickSort http://poj.org/problem?id=2299 大意:一个排列经过多少次交换能够成为排好序的结果。 分析:之前用归并排序做过,这次练习数据结构。离散(映射)+树状数组 例如:1 9 8 4 5 ---> 1 5 4 2 3原创 2016-03-19 18:43:08 · 568 阅读 · 0 评论 -
初识单调栈
问题是新的解决之道的催化剂。一个看似简单的题目我写了好几个小时,实在完成不了,查了查,原来需要用到传说中的单调栈。于是,学了一些皮毛。练习了几道。 51nod 1437 迈克步 http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1437 有n只熊。他们站成一排队伍,从左到右依次1到n编号。第i只熊的高度是a原创 2016-02-26 15:38:32 · 590 阅读 · 0 评论 -
基础排序算法
七个基础排序算法(均为内部排序): 直接插入排序 希尔排序 冒泡排序 简单选择排序 快速排序 堆排序 二路归并排序排序算法稳定性:经过排序后,具有相同关键码的元素之间的相对次序保持不变,则称该排序方法是稳定的;否则不稳定。直接插入排序:void InsertSort(int a[],int n){ // index start at 1, a[0] is temp one i原创 2016-03-27 21:09:26 · 1295 阅读 · 2 评论 -
用C学习线性表
线性表是n个数据元素组成的有限序列,按照存储的方式分为顺序和链式。今天用C对顺序和链式分别做点练习。 (下面有很大一部分的代码是用vim写的,贴到博客上就有些格式问题了,不知道怎么解决。。)纯C+顺序表 完成迷你选座系统谁说简单数组不强大? 用简单的数组完成小型的选座系统建设:#include <stdio.h> #include <stdlib.h> #include <string.h> #原创 2016-06-29 11:45:47 · 682 阅读 · 0 评论 -
hdu 1022 Train Problem I (栈的应用)
题意:火车进站问题,判断出栈的顺序。 仅仅是栈的简单应用,熟练掌握即可。 #include #include #include #include using namespace std; stack sta; bool judge=true; int n,cnt,in[10],out[10],p,order[20]; void sempty(){ while(!sta.e原创 2015-05-31 23:45:40 · 524 阅读 · 0 评论 -
poj 1028 Web Navigation(模拟)
题目:http://poj.org/problem?id=1028 Web Navigation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 31299 Accepted: 14032 Description Standard web browse原创 2015-09-07 20:24:37 · 647 阅读 · 0 评论 -
hdu 4902 Nice boat(线段树区间更新lazytag·单点更新)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4902 Nice boat Time Limit: 30000/15000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 1925 Accepted Submiss原创 2015-08-31 20:30:04 · 729 阅读 · 0 评论 -
hdu 1754 I hate it(线段树单点更新)
题意:http://acm.hdu.edu.cn/showproblem.php?pid=1754 涉及区间查找,单点更新的操作,熟练掌握线段树的使用。 #include #include #include using namespace std; const int maxn=2e5+5; int sco[maxn]; struct node{ int left,right,scor原创 2015-06-02 15:58:36 · 468 阅读 · 0 评论 -
hdu 2852 KiKi's K-Number(线段树单点更新)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2852 Problem Description For the k-th number, we all should be very familiar with it. Of course,to kiki it is also simple. Now Kiki meets a very simi原创 2015-08-08 23:56:56 · 580 阅读 · 0 评论 -
poj 2828 Buy Tickets(动态队列·线段树单点更新)
题目:http://poj.org/problem?id=2828 大意:一群人排队,第i个人来到队伍中站到处于posi的人的右边,且每个人都有不同的表示值,问最终的结果? Sample Input 4 0 77 1 51 1 33 2 69 4 0 20523 1 19243 1 3890 0 31492 Sample Output 77 33 69 51 31492 20523原创 2015-08-08 13:17:22 · 544 阅读 · 0 评论 -
hdu 1394 Minimum Inversion Number(线段树单点更新)
题意:给定一个数字序列,如果一次次的把左边第一个数移动到最右边,它的逆序数将会发生变化,问:找出最小的逆序数。题意详见:http://acm.hdu.edu.cn/showproblem.php?pid=1394 首先解释逆序数:在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。通过细节分析可以发原创 2015-06-03 11:12:47 · 600 阅读 · 0 评论 -
poj 3264 Balanced Lineup (线段树)
题意:http://poj.org/problem?id=3264 这里需要用到线段树的查询,不过特别的是,它需要查找两个值,最大值和最小值,在查找操作中稍加处理即可。 #include #include #include #include using namespace std; const int maxn=5e4+5; int height[maxn];// 最长区间长度 stru原创 2015-06-02 16:35:34 · 407 阅读 · 0 评论 -
poj 3667 Hotel(线段树区间更新)
题目:http://poj.org/problem?id=3667 大意:有N个房间,给出M条语句,“1 a”表示要求查询是否存在连续的a个空的房间,有的话输出最左边的一个,没有的话输出0。“2 a b"表示把从a开始的b个房间清空。 Sample Input 10 6 1 3 1 3 1 3 1 3 2 5 5 1 6 Sample Output 1 4 7 0 5 区间更新原创 2015-08-07 17:13:18 · 567 阅读 · 0 评论 -
线段树初识&hdu 1166 敌兵布阵
一些区间有关的问题,给一些区间线段求并区间的长度或并区间个数当数据范围过大时会让时间复杂度过高不满足解题时间的要求。此时需要一种高效的数据结构来帮助我们。线段树正是这样的工具,它借助分而治之的思想解决子问题,再将子问题的解组合起来。有关线段树的各种操作函数均用递归函数实现:原创 2015-06-01 23:13:55 · 513 阅读 · 0 评论 -
poj 3468 A Simple Problem with Integers(线段树区间更新)
题意:http://poj.org/problem?id=3468 这纯粹研究区间更新,区间查询,熟练掌握线段树的运用技能。相比,单点更新,多了add标志,adding, query操作时也多了对它的特殊操作pushdown。 #include #include using namespace std; #define LL long long const LL maxn=1e5+5;原创 2015-06-05 22:01:35 · 598 阅读 · 0 评论 -
hdu 4006 The kth great number(线段树 || 优先队列)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4006 求一个数字序列的第K大的值。先输入两个数字n,k,接着是n行输入,I表示加入新的数字,Q是询问第k大的数字。 Sample Input 8 3 I 1 I 2 I 3 Q I 5 Q I 4 Q Sample Output 1 2 3 练习线原创 2015-08-08 18:17:11 · 517 阅读 · 0 评论 -
hdu 2795 Billboard(线段树)
题意:给一个h*w的广告牌,一个单位高度是一行,然后有一些公告贴上去,公告是1*wi的大小的长纸条,优先贴在左上方,如果空间不满足就输出-1,可以的话就输出位置(第几行) 类似的区间问题首先想到的是线段树。但是这里要以行数为着眼点,left是上行数,right是下行数,把wi设为结点内的一个数据成员。最后写出found子函数,水到渠成。 #include #include #includ原创 2015-05-29 11:19:13 · 466 阅读 · 0 评论 -
poj 1823 Hotel(线段树·区间更新·lazy tag)
题目:http://poj.org/problem?id=1823 Hotel Time Limit: 5000MS Memory Limit: 30000K Total Submissions: 2398 Accepted: 1051 Description The "Informatics" hotel is o原创 2015-08-29 20:57:34 · 648 阅读 · 0 评论 -
树状数组
树状数组的组成结构: 树上结点C和A数组的关系: C结点管辖的区域是,其中k是结点下标二进制末尾0的个数计算: int lowbit(int a){ return a&(a^(a-1)); //return a&(-a); } 则对于一颗子树,父节点和子节点的区域关系:. 于是有了这样的更新函数: int update(int i,int x){原创 2015-12-12 19:12:46 · 673 阅读 · 0 评论