线段树是非常基础的算法了……
线段树是一种二叉树,可视为树状数组的变种,最早出现在2001年,由程序竞赛选手发明。我们ZS老师说过:“所有可以用树状数组解决的题目都可以用线段树解决,但是部分线段数可以解决的题目却无法用树状数组解决。”由此可见线段树十分强大……
线段树是非常基础的算法了……
线段树是一种二叉树,可视为树状数组的变种,最早出现在2001年,由程序竞赛选手发明。我们ZS老师说过:“所有可以用树状数组解决的题目都可以用线段树解决,但是部分线段数可以解决的题目却无法用树状数组解决。”由此可见线段树十分强大……
作为OIer,写博客的时候经常会遇到需要数学公式的情况,特别是Σ、∈等符号,在markdown里用起来十分不友好(百度百科网络流那一篇就出现了:Σ(w∈V)f(u,w)=0。好在markdown中有插件为我们提供了强大的数学公式显示支持。现在我们就可以这样浪:
$ \displaystyle \sum_{w\in V} f(u,w)=0 $
在C语言中,我们使用宏定义函数这种借助编译器的优化技术来减少程序的执行时间,那么在C++中有没有相同的技术或者更好的实现方法呢?答案是有的,那就是内联函数。内联函数作为编译器优化手段的一种技术,在降低运行时间上非常有用。我们将从:
这四个方面对内联函数进行介绍。
网络流(network-flows)是一种类比水流的解决问题方法,与线性规划密切相关。网络流的理论和应用在不断发展,出现了具有增益的流、多终端流、多商品流以及网络流的分解与合成等新课题。网络流的应用已遍及通讯、运输、电力、工程规划、任务分派、设备更新以及计算机辅助设计等众多领域。
(2018.08.29 更新此文,你没有阅读过的船新版本)
回忆起自己寒暑假在XH集训的时候,那个时候每天ZS老师都会提醒我们:「回家经常给U盘做做备份,电子产品的东西什么时候出问题你也不知道,balabala……」然而,U盘里内容越来越多,复制(备份)也要花很长时间,晚上写好代码还要看着U盘里数据移动十几分钟(因为复制完要关机),太浪费时间了……而且直接复制对于备份来说还有个缺陷。于是乎U盘自动备份的批处理文件就应运而生了。
我们学过最长升序列(Longest Increasing Subsequence,简称LIS)和最长公共子序列(Longest Common Subsequence,简称LCS)(没错之前两篇博客就是为这篇准备的……),那么如果我们要求最长公共上升子序列(Longest Increasing Common Subsequence,简称LICS或者LCIS)呢?
最长上升子序列,全称Longest Increasing Sequence,简称LIS,在计算机科学上是指一个序列中最长的单调递增的子序列(百度百科)。这个序列不一定是连续的。
2019.10.11 Upd:这是 ZS 时期写的一篇非常 naive 的博客,别看了。
SPFA 会被卡,Dij 才最好。
SPFA真是最好的单源最短路算法,没有之一。
SPFA全称是Shortest Path Faster Algorithm,直译过来就是“最短路更快算法”,从这个名称就能看出SPFA效率很高。SPFA加上SLF优化以后被称作单源最短路的“无敌”,时间复杂度可以达到O(ke)(k表示平均每个节点入队次数,k≤2,e表示边数),可以刷负边权。
Linux用久了发现VIM命令还是需要学一下……
一开始用VIM:“这什么垃圾编辑器,连图形界面都没有,还要用命令行,不能直接移动光标,上个世纪的吧!”VIM在终端里运行,使用方式完全与我们习惯用的Windows操作系统里的文本编辑器不同。实际上这就是VIM的强大之处:不需要图形界面就可以直接在终端里编辑文本。
C++ STL 里的 set,顾名思义就是集合。和数学里的集合一样,C++ STL 里的集合也具有互异性,即每个元素最多只出现一次。如果需要某个值出现多次就可以用 multiset。
集合的好处是,集合里存的元素都是从小到大排好序的。这和插排不同,集合的复杂度是 log2(n),对解决一些题目十分有用。