• 2024-05-11set 容器详解 附大根堆题解
    声明本文中题解部分内容大部分转载自@sonnety的这篇博客中,本文为为方便复习而写的结论类文章,读者可自行跳转至原文处阅读。PART1set什么是set——来源cppreference简言之,它就是一种存进去就可以自动按升序排列的特殊容器,通常的set还具有自动去重的功能。定义方
  • 2024-02-03堆(优先队列)
    堆是一种树形结构,树的根是堆顶,堆顶始终保持为所有元素的最优值。有大根堆和小根堆,大根堆的根节点是最大值,小根堆的根节点是最小值。堆一般用二叉树实现,称为二叉堆。堆的存储方式堆的操作empty返回堆是否为空top直接返回根节点的值,时间复杂度\(O(1)\)push将新元素添加在
  • 2023-12-14python heapq 模块
    堆的概念堆是用数组表示的二叉树,分为大根堆和小根堆:大根堆是堆顶元素最大的堆,小根堆是堆顶元素最小的堆 堆的建立堆用列表来表示。在往堆中加入元素时,在列表最后加入一个元素并与其父节点比较(n/2位置)看是否需要进行交换,然后层层比较直到根节点pythonheapq#建立小根堆
  • 2023-12-10大根堆和小根堆
    #include<iostream>usingnamespacestd;inth[1000000];intz=0;//z表示数列中有几个元素voidup(intx){ while(x>1&&h[x]<h[x/2]){ swap(h[x],h[x/2]); x/=2; }}voiddown(intx){ while(x*2<=z){ intt=x*2; if(t+1<=z&&
  • 2023-08-22[ABC314G]
    [ABC314G]Amulets考虑如果\(k\)是固定的,可以二分答案,然后暴力check。而本题显然不行。有一个简单的性质:如果我们知道了最多可以打几只怪兽,那么带某种护身符的贡献是一定的,此时可以直接计算。由于\(k\)递增时,答案也一定递增。我们可以考虑使用一个指针表示当前能够打的
  • 2023-06-22大根堆和小根堆在海量数据的top N问题中,时间复杂度O(nlogN)
    堆可视化操作演示:https://visualgo.net/zh/heap堆实际上是一棵完全二叉树,其任何一非叶节点满足性质:小根堆:Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]或者大根堆Key[i]>=Key[2i+1]&&key>=key[2i+2]即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。堆分为大根堆
  • 2023-04-29优先队列
    优先队列有两个分支,一个是小根堆,一个是大根堆。这是一个优先队列的定义:priority_queue<int>q;默认是大根堆。大根堆,也就是堆顶是最大的数,按着降序排到堆底。小根堆,也就是堆顶是最小的数,按着升序排到堆底。大根堆定义:priority_queue<int>q;由大根堆转小根堆有三种方
  • 2023-04-29动态k小
    题目: 这道题目十分简单,只要用大根堆维护前k小的数字即可,用大根堆是因为方便输出(用小根堆需要输出堆底),前k个先单独输入,不输出(第k个除外,单独输出),之后k+1~n如果输入进来的数字比堆顶大,直接跳过,否则先把原堆顶弹出再推入输入进来的数字,每一次输出堆顶即可。程序:#include<bits/s
  • 2023-04-21堆排序
    1.堆的定义: 在一颗完全二叉树中,每一个根节点的值均大于(或小于)其左右子树根节点的值,被称为堆。堆分为两种类型:大根堆和小根堆。其中每一棵子树的根节点的值大于等于左右子树节点的值,被称大根堆。如果是每个节点的值均小于等于左右节点的值,被称为小根堆。
  • 2022-12-21HeapSort堆排序原理与实现
    HeapSort堆排序原理与实现  堆排序是比较重要的数据结构,其主要优点是通过排序二叉树的特性能够记录每个数之间的大小关系,以至于不需要重复比较,对于海量数据排序问题可以减
  • 2022-10-09女神训练赛 Round 02.md
    棋盘问题这题就是简单的搜索,类似八皇后问题,dfs枚举每一行放在哪里一列,或者不放。在枚举的过程中直接筛掉之前放过的列。#include<string>#include<iostream>using
  • 2022-09-24大根堆和小根堆来存储结构体
    在用priority_queue存储结构体时(假设结构体的类型为Node),我们不能用priority_queue<Node,vector<Node>,greater<Node>>h然后重载<来表示小根堆,会编译失败我们应该统