摘要: 1、逆序对的定义 什么是逆序对呢?逆序对指的是在一个序列中,有x、y,满足x<y且a[x]>a[y],那么a[x]、a[y]就是一个逆序对。 我们关于逆序对主要是求一个序列中逆序对的个数。 2、如何求逆序对 考虑朴素算法,对于每个x,y考虑一遍就好了,代码如下(其实我不太想打): 明显的,这是一个O 阅读全文
posted @ 2019-10-08 19:10 冰逝 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 1、有关树剖 我们经常用线段树/树状数组来维护一个区间,并进行修改(如区间加、区间乘,区间赋值,区间开方等)和求值(最值、和、积、颜色个数等)的操作,在这基础上还有可持久化线段树等进阶操作,也可以通过套起来成了维护二维面的二维线段树,这都是可以的。 但是,有的时候我们需要去维护一颗树,进行路径上和子 阅读全文
posted @ 2019-10-05 10:48 冰逝 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 1、何为逆元 有的时候,我们要在模p的意义下,求一个事件的概率期望,这就要用逆元,因为分数很容易除不尽,而a/b在模p意义下即为a*(b在模p意义下的逆元),这样就能避免无限循环的情况。 一个数的逆元定义为:数为a,模数为p,逆元为b,那么,满足a*bmod p=1. 2.1、费马小定理求逆元 费马 阅读全文
posted @ 2019-08-12 10:24 冰逝 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 动态开点线段树 阅读本篇请先学习线段树。 动态开点线段树是一类特殊的线段树,与普通的线段树不同的是,每一个节点的左右儿子不是该点编号的两倍和两倍加一,而是现加出来的。 一般有两种:为了节约空间,我们会不一次性建好树,而是需要时再建。 还有一种,就是运用主席树(可持久化线段树)的时候。 我们先说节约空 阅读全文
posted @ 2019-08-06 15:41 冰逝 阅读(2650) 评论(2) 推荐(0) 编辑
摘要: 1.1可持久化 顾名思义,数据的可持久化就是不仅能访问该文件的当前版本,也能访问该文件的历史版本,比较常见的应用就是撤销了,而本篇博文要写的就是线段树可持久化的实现。如果没学过线段树的话请先学习线段树以及线段树的动态开点。 1.2实现原理 考虑最简单的情况: 这是一棵非常简单的线段树,设为0号,现在 阅读全文
posted @ 2019-08-05 10:25 冰逝 阅读(628) 评论(0) 推荐(0) 编辑
摘要: 1、问题导入 链式前向星是引用在图上的一中特殊算法,如果用邻接矩阵(p[i][j]代表i点到j点的长度)来存储一张图,那么所占用的空间就是n2(n代表该图上点的个数),显然,n<=10000,而链式前向星来存储的话,就只有m的大小,对于大多数图(特例:完全图等)都比邻接矩阵所占空间小,更适合使用。 阅读全文
posted @ 2019-08-04 13:57 冰逝 阅读(573) 评论(0) 推荐(1) 编辑
摘要: 1何为最短路 最短路算是OI上的经典问题了,最简单的问题为:在一个图上,求一个点到其他点的最短距离,即单源最短路。较为复杂的有求所有点到除它以外的其他点的最短路,即多源最短路。最短路的算法有很多,如dijkstra,floyd,bellman-ford,SPFA等,由于一些原因,除了判负环以外,SP 阅读全文
posted @ 2019-08-01 13:10 冰逝 阅读(737) 评论(2) 推荐(1) 编辑
摘要: 1.1何为线段树 线段树是一种支持O(nlogn)的时间复杂度进行区间查询、区间修改,O(logn)进行单点修改、单点查询的数据结构,它比朴素算法(O(n2))快很多,能支持n<=1000000范围,比树状数组、ST表代码实现难度大,且常数较大,但能实现的功能多,“树状数组能做的线段树都能做,线段树 阅读全文
posted @ 2019-07-25 13:38 冰逝 阅读(389) 评论(0) 推荐(1) 编辑