数据结构
文章平均质量分 77
我的程序跑快快
这个作者很懒,什么都没留下…
展开
-
HihoCoder - 1066(并查集、模板)
分析:人名字符串用map映射一下就可以了,这个是一个存储int的并查集,有优化。代码:#include <iostream>#include <vector>#include <map>using namespace std;class UnionFindSets{public: UnionFindSets(); UnionFindSet...原创 2019-11-02 14:12:02 · 226 阅读 · 0 评论 -
HihoCoder - 1068(RMQ问题ST表,模板)
题意:很基础的模板题,但是要封装一个告诉的St表模板类出来,实测效率不低。代码:// 决定写一个ST表的类,维护区间最小值#include <iostream>#include <vector>#include <stdio.h>using namespace std;template <class Type>class StLis...原创 2019-11-01 21:26:45 · 226 阅读 · 0 评论 -
HDU - 2838 Cow Sorting解题报告(树状数组求逆序数相关+技巧)
题目大意:有很多的牛n(100,000),每个牛都有一个暴躁值,现在想把这些牛按照暴躁值从小到大排序,每次只能交换两头相邻的牛,交换他们付出的代价就是,两头牛暴躁值的和。现在问你把这些牛按照暴躁值从小到大排序至少需要付出多少代价。分析:有点像求哪个逆序数,但是这里要分析一个问题,需要调换的次数是一定的,那么,如何调换才能付出最小的的代价。 比较感性的想法就是,每次调换代价最小的,但是这个贪心策略确原创 2017-04-24 21:00:49 · 422 阅读 · 0 评论 -
POJ - 1990 MooFest解题报告(树状数组+离线处理)
题目大意:有一排acm大牛(20,000),告诉你他们每个人的听力水平和所在位置坐标,并且他们每个人之间交流都需要的声音大小为:他们之间的距离乘他们两个人听力水平的较大值。现在问你每一对牛都交流一次,并且他们交流都是用的能交流的最小的声音,请算出他们这个活动产生的各种声音的大小的总和(应该是相同大小的声音多次出现分别都加上)。 分析:至少要求出每两个牛交流产生的声音值20000∗(20001)/2=原创 2017-04-25 10:02:07 · 455 阅读 · 0 评论 -
HDU - 1213 How Many Tables解题报告(并查集)
并查集魔板题原创 2017-04-25 20:06:10 · 333 阅读 · 0 评论 -
POJ - 2481 Cows解题报告(树状数组 相同点重复计数处理)
题目大意:给你好多的牛,10^5,然后再告诉你每个牛有一个闭区间,现在定义,如果一个牛a的区间是另一个牛b的区间的子区间,那么就说b就比a更强。显然就是让你求出对于每个牛来说,有多少牛比它更强。分析:现在应该就是把所有的区间都加到树状数组里面去,然后查询每个区间范围内有多少个完整的区间。但是要注意,有可能有两个完全相同的区间,那么根据xcx的公平哲学原理以及字母无关性等显然性质可知,这两个牛谁都不比原创 2017-04-26 09:04:02 · 416 阅读 · 0 评论 -
HDU - 1556 Color the ball解题报告(树状数组 处理区间问题)
题目大意:我就服中文题,多组测试实例,每组n(100000)个数,进行n次操作,每次操作为,给区间[ a , b ](a<=b)进行一次涂色。最后问你每个点分别进行了多少次涂色。原创 2017-04-26 10:19:49 · 305 阅读 · 0 评论 -
HDU - 3874 Necklace解题报告(树状数组+哈希表)
题目大意:多组测试数据,给你一串数(50000个),每个数最大1,000,000,然后询问最多200,000次区间和。 但是有一个很麻烦的地方就是,一个区间里面,相同的数只能计算一次。分析:看似有相同的数只是一个很小的细节,但是这应该才是这道题的关键。 现在急于解决的一个问题就是,怎样让这些相同的数不被重复计算,比较感性的想法就是,这些数我只存一个,也就是第一个,后面再出现我就不存了。但是这样询原创 2017-04-27 11:32:19 · 281 阅读 · 0 评论 -
POJ - 1195 Mobile phones解题报告(二维树状数组)
题目大意:给你一个s*s的方阵,然后有若干操作:给指定点增加数量(可能为负);查询指定区域数量总和。用二维树状数组即可。关于二维树状数组:还是用类比一维树状数组的想法,让在一个区域上一些位置上的数,来表示原数组一些特定区域上的点的值的和。具体的原理我会在下一篇树状数组总结中给出。魔板代码可以看一下这一篇的sum和add函数。代码:#include<iostream>#include<string.原创 2017-04-27 16:04:48 · 511 阅读 · 0 评论 -
CodeForces - 833B The Bakery(dp+线段树的巧妙运用)
给你一串数(n<35000),让你把他们分成 k(k<50)段,每一段的值定义为这一段里不同数字的个数。现在让你求出一种划分方式,使得这 k 个区间段的值的和最大。原创 2017-08-07 15:24:16 · 524 阅读 · 0 评论 -
CodeForces - 830B Cards Sorting(贪心+离散化+树状数组)
题目大意:给你一串数字,操作过程如下:不断把队首数字掉到队尾,如果当前队首数为队列中的最小值,那么就删除队首。两种操作都会使操作数加一。问你至少要操作多少次才能将队列删空。原创 2017-09-13 11:24:27 · 462 阅读 · 0 评论 -
HDU - 6161 Big binary tree(树上dp+hash优化空间)
题目大意:给你一颗n个节点的完全二叉树,从根节点标号为1。标号为x的节点的左、右儿子标号分别为:2x、2x+1。这棵树的每个节点的权值为它本身的标号。现在告诉你有m次操作,每次操作要么就是把一个点变成给定值,要么就是让你输出经过给定某点的一条最长路径的长度。(一条路径的长度就是它经过的每个点的权值和,包括端点)数据范围:$n<1e8,m<1e5$原创 2017-08-23 19:21:26 · 396 阅读 · 0 评论 -
2018年大连海事大学校赛(ACM竞赛高校联盟训练赛 第11场)题解
比赛地址:https://www.jisuanke.com/contest/1224(已添加到计蒜客题库)A.Alice and Bob博弈论+线段树博弈论是最经典的Nim博弈,用线段树维护区间sg函数的异或值,然后区间更新就可以做。注意要预处理出每个子游戏的sg函数值。代码:#include <iostream>#include <math.h>...原创 2018-04-08 11:25:42 · 1372 阅读 · 0 评论 -
小根堆实现“优先队列”数据结构及“堆排序”算法(C/C++)
功能介绍:min_heap p;//声明小根堆p.len;//堆的大小p.add(x);//将数据x插入堆中p.del();//删除堆顶元素p.top();//返回堆顶元素p.print();//层序遍历顺序输出堆中元素p.build(a,n);//将数组a[]的前n个元素建立小根堆( 时间复杂度:O(n) )p.clear();//清空堆中元素p.psort();//将p中元素...原创 2019-02-18 15:34:10 · 1147 阅读 · 0 评论 -
POJ - 2352 Stars解题报告(树状数组求二维区域和)
题目大意:给你一个二维的坐标系(32000*32000),里面有n(15000)个点,告诉你每个点的坐标(各个点各不相同)。定义:(x0,y0)(x_0,y_0)的左下角区域为:{(x,y)(x,y)|0<=x<=x00<=x<=x_0&&0<=y<=y00<=y<=y_0};让你输出左下角区域有分别有0个点,1个点。。。n-1个点的点的个数。 注:坐标点以y轴坐标的升序给出,y坐标相同的点以x轴原创 2017-04-24 11:33:04 · 370 阅读 · 0 评论 -
HDU - 1166 敌兵布阵 解题报告(树状数组魔板题)
题目大意:反正都是中文的,可以自己去读。把题目的意思抽象化就是,给你一串数(50000)个,然后进行最多40000次操作,操作内容包括:改变某一个数的值,查询该数组的一个连续区间[l,r][l,r]的所有值的和。分析:如果用普遍的方法,那么,每次改变某一个数的值时间复杂度O(1);查询一次,时间复杂度O(n);如果查询太多,肯定就超时了。解决办法就是引入树状数组,让查询区间和和改变某一数的值的时间复原创 2017-04-24 09:17:54 · 329 阅读 · 0 评论 -
POJ - 3349 Snowflake Snow Snowflakes解题报告
题目大意: 给你n(100,000)组数,每组6个,每个数都在0-10,000,000范围内,每组数都可以围成一个圈,问你是否可能围成相同的圈(6个数按所给顺序依次相连,可逆时针可顺时针)。如:123456和432156为同一个圈。注意这道题给的时间是4s。原创 2017-02-18 21:24:17 · 360 阅读 · 0 评论 -
POJ - 3274 Gold Balanced Lineup解题报告
题目大意:给你n(100,000)个数,让你把他们都变成k位(30)2进制的数,然后,让你找到最长的该数列的一个子串(连续的),该子串满足:这些数化为2进制的数之后,这k位,每位的1的个数相同。原创 2017-02-19 14:25:28 · 269 阅读 · 0 评论 -
POJ - 2503 Babelfish解题报告
题目大意:给你个字典,就是一个字符串对应一个外国话字符串,最多100000条。然后就是要查询最多100000条字符串分别查到它们对应的外国话字符串。(每个字符串长度都超过10)原创 2017-03-01 08:06:55 · 695 阅读 · 0 评论 -
POJ - 1840 Eqs解题报告
题目大意:对于给定的a1,a2,a3,a4,a5[-50,50]。让你求出方程a1·x1^3+a2·x2^3+a3·x3^3+a4·x4^3+a5·x5^3=0的解([-50,50]范围内)的个数。原创 2017-02-20 12:59:45 · 404 阅读 · 0 评论 -
POJ - 2002 Squares解题报告
题目大意:给你一个二维平面上面的n(1000)个点的坐标(每个点坐标都不超过20000),让你找出有多少个正方形。原创 2017-02-20 14:12:23 · 316 阅读 · 0 评论 -
POJ - 3253 Fence Repair解题报告
题目大意:好像就是说,给你一块木板,让你按要求给他切成的几块已知长度的小块,然后每对一块进行切割的时候,就会产生一定的数值,该数值为该被切割木板的长度。现在已知各个要切乘的小块(1-20,000个)的长度(1-50,000单位),让你找到一个最优的切割方案,使得产生的总数值最小。原创 2017-03-01 11:14:38 · 1623 阅读 · 1 评论 -
POJ - 1442 Black Box解题报告(求第k小的数 堆)
题目大意:给你一个空的集合。两种操作,add(i)和get分别是把i加入到集合中去,将集合中的数从小到大排列,k++,然后输出第k个(k一开始是0)。现在让你按照他给出的流程疯狂操作,并输出每次get弹出的值。原创 2017-03-06 20:52:57 · 511 阅读 · 0 评论 -
POJ - 2513 Colored Sticks解题报告(欧拉回路+并查集+字典树)
题目大意:有n(250000)根木棍,每根的两端都有颜色,问你这些木棍能不能连成一条直线,各个接口的两根木棍的颜色都相每根棍子两端的颜色都是通过一个长度不超过10个字符的字符串来给出的。原创 2017-03-08 22:46:33 · 351 阅读 · 0 评论 -
POJ - 2418 Hardwood Species解题报告(trie树的建立以及遍历)
题目大意:就是给你n个(1000000)字符串,这些字符串一共最多m(10000)种,一个字符串最长30个字符。问你每种字符串占总数的百分比。原创 2017-03-09 08:55:39 · 352 阅读 · 0 评论 -
POJ - 2299 Ultra-QuickSort解题报告
题目大意:给你一串数(500,000),问你给他们按大小排序至少需要调换几次(只能相邻的调换)。原创 2017-02-17 10:12:43 · 910 阅读 · 0 评论 -
HDU - 3450 Counting Sequences解题报告(动态规划+离散化+树状数组+二分查找)
题目大意:给你一串数(50,000个),和一个最大差 d <= 10,000,000。现在问你这串数有多少个子序列(至少有两个元素)满足每两个相邻的元素之间的差不超过d。分析:假设这一串数为存在 a[] 数组里面。dp建立:设 dp [ i ] 表示这串数字以 a [ i ] 结尾的满足要求的子序列的个数。 则状态转移方程为:dp[i]=(b1∗dp[1]+b2∗dp[2]+...+bi−1∗dp原创 2017-04-29 12:15:38 · 449 阅读 · 0 评论 -
POJ - 3264 Balanced Lineup解题报告(RMQ问题 ST算法 魔板题)
题目大意:给你一串数,50,000个,询问200,000个区间,每次询问输出该区间最大值与最小值的差分析:这个因为不用修改,只需要查询,其实用树状数组也是可以的我觉得,但是因为还是有一个log50000,说不定真的会超时,所以还是选择用他给的这个O(1)复杂度的算法吧。关于st算法:就是首先预处理: dp [ i ] [ j ] 表示 从第 i 个数开始 向后数 2j原创 2017-04-30 22:19:00 · 600 阅读 · 0 评论 -
POJ - 1611 The Suspects解题报告
题目大意:n(30,000)个学生假如m(500)组,一个人可以加入多组,这堆学生被编号(0—n-1),编号为0的学生有病一个组的人可以相互接触,问有多少人可以和0号学生接触(包括0号学生他自己)原创 2017-02-17 11:31:06 · 271 阅读 · 0 评论