简介

区间最值查询(range minimum/maximum query, RMQ)问题主要有两种解决方法:ST表(sparse table)线段树(segment tree),本文主要讲ST表。
ST表适合解决静态RMQ问题,即:

给定\(n\)个数,进行\(m\)次询问。对于每次询问,都需要回答区间\([l, r]\)中的最小值或最大值。

如果用暴力做法,每次都对区间\([x, y]\)扫描一遍,肯定是过不了的,所以我们需要引入ST表。ST表可以实现\(O(n \log n)\)的预处理和\(O(1)\)的查询。

阅读全文 »

简介

质数和最大公约数(GCD)是数论中最基础的部分之一。
本文将会讨论质数的判定与筛法以及欧几里得算法与扩展欧几里得算法。

阅读全文 »

简介

所谓最短路问题,就是求两节点间权值和最小的路径。
在一张图中,不一定存在最短路径,也不一定只存在唯一的最短路径。

阅读全文 »

简介

对拍是一种对学竞赛的同学非常有用的debug技能。在做题时,你肯定会遇到这样的情况:

???我不是过了样例吗???为什么WA了2个点???代码好像没什么问题啊???辣鸡评测姬

这个时候你就需要对拍来调试程序了。

对拍,说白了就是拿一个输入数据分别让你写的程序和标程(暴力程序)跑一遍,比较输出的数据。
对拍一般有以下3个步骤:

  1. 生成一组输入数据
  2. 把这组数据分别让两个程序运行一遍,生成输出数据
  3. 比较两组输出数据

那么为了实现对拍,我们需要:

  • 你的程序
  • 标程
  • 数据生成器
  • 对拍脚本(批处理脚本)

如果你懒得看下面的内容可以直接在GitHub下载程序。 本文仅适用于Windows系统。

阅读全文 »

简介

背包问题是动态规划中基础但重要的一种问题,其内容可以描述为:

\(n\)种物品和一个容量为\(W\)的背包,每种物品都有重量\(w_i\)和价值\(v_i\)两种属性,在所选物品不超过容量\(W\)的情况下,选择若干件物品放入背包使得总价值最大。

推荐阅读dd大佬的背包问题九讲

阅读全文 »

前言

MySQL是目前使用最广泛的关系数据库管理系统,最初由瑞典的MySQL AB开发。后来Sun收购了该公司,Sun又被Oracle收购,MySQL成为Oracle旗下产品。

MySQL的安装过程较为繁琐,所以我参考了网上的一些资料,整理出这篇文章。
本教程仅适用于Windows系统。

阅读全文 »

简介

位运算(bitwise operation)就是将数转换为二进制逐位运算。通常在处理器上,位运算的效率比乘除法高。

阅读全文 »

简介

所谓最小生成树(minimum spanning tree),就是一个无向图的极小连通子图,包含原图中的所有节点,且所有边的权值之和最小。因其是一棵树,所以得名最小生成树。

听不懂?那我们来炒一颗栗子。 对于这个无向图: E.G. 下图就是它的最小生成树,边权和为\(2 + 2 + 3 = 7\) 不过对于一部分图,比如上面炒的栗子,最小生成树有多种解,但是边权和是不变的:

阅读全文 »

咕了这么久终于更新了

简介

拓扑排序(topological sort),是图论中的一种算法,简单点说就是:
对一个有向无环图(DAG)的节点进行线性排序,使得从点\(u\)到点\(v\)的每个有向边\(uv\)\(u\)都在\(v\)之前。
当且仅当图没有环,即有向无环图时,该图存在拓扑排序。因此,拓扑排序可以用于判断图是否存在环。

拓扑排序可以形象地解释为:在某校中,每门课可能有若干门先修课,如果要修读某一门课,必须要先修读此课程所要求的所有先修课。假设一个学生同时只能修读一门课程,那么,他修完所有课程的顺序是一个拓扑序。

举个栗子:
对于下图,拓扑排序的结果是\(1 - 6 - 3 - 4 - 2 - 5\)E.G. 当然,拓扑排序的结果肯定是不唯一的,比如图片中\(6 - 1 - 4 - 3 - 5 - 2\)的顺序显然也可以。

阅读全文 »

简介

链表(linked list)是一种线性数据结构,最大的特点就是存储不连续,可以用于实现邻接表等。

链表分为单链表双向链表循环链表三种,如图所示: 单链表 双向链表 循环链表

可以看出,单链表中每个节点都有一个next指针,指向后一个节点,而最后一个节点的next为空指针;
双向链表的每个节点还有一个prev指针,指向前一个节点;
循环链表则是在上面的基础上让最后一个节点的next指向头节点,如果是双向循环链表还会让头节点的prev指针指向最后一个节点。

阅读全文 »
0%