摘要: 基本思路就是,从后往前读取数字small[i]。在剩余编号集合里(一开始剩余编号集合为全集)查找第small[i]+1个编号,该编号就是对应位置牛的编号。 若直接用数组来做,则每次查找都需要遍历前n个数。而用线段树来做则可以降低为nlogn的复杂度。 事实上感觉可以直接用stl的set来做,直接模拟 阅读全文
posted @ 2018-04-06 17:05 KYSpring 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 通过这题基本完整理解了并查集的构建和使用。很轻巧的一种数据结构。 本题的方法值得注意:并没有直接构建两个帮派的集合,而是构建: 关系确认集合+若干单元素集(也即未确认帮派的初始状态)并辅助一个rel数组记录和父节点的关系(0相同,1不同)。 若关系确认,则将两个树合并到一棵树上;同时凭借rel数组判 阅读全文
posted @ 2018-04-06 15:27 KYSpring 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 又是一道数据结构题,使用堆来进行权值调整和排序,每次调整都是o(n)的复杂度,非常高效。 第一眼看题觉得可以用优先队列来做,应该也很简单。 事实上多数优先队列都是通过堆来实现的。 写的时候还是出了一些问题: 1、二叉树根节点下标显然不能为0; 2、限界之后若出现扩界要小心; 3、在迭代循环比较的时候 阅读全文
posted @ 2018-04-05 19:04 KYSpring 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 第一遍看的时候立即想到了哈希表。 再想时觉得两个队列,一个用来排队伍之间的顺序,一个用来排队伍内部成员的顺序即足够了。 DEQUE的时候先判断哪只队伍排在队首,之后再让该队伍中的首队员出列。 整体没有什么难度,注意的一些小tips如下: 1、多个测试用例一定注意先初始化(因为这个wa了两次。。呃呃) 阅读全文
posted @ 2018-04-04 21:29 KYSpring 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 1、关于题面的理解:此题故弄玄虚,题面拗口;实际上不过是求若干连续矩形中的所能构成的最大矩形面积。 2、关于做法:虽然是数据结构题,但这种思维角度值得学习。排序简化+等效转化(还带一点回溯的味道) ac代码如下: 阅读全文
posted @ 2018-04-04 20:24 KYSpring 阅读(130) 评论(0) 推荐(0) 编辑