随笔分类 - OI-算法学习笔记
摘要:P1531 I Hate It #include<bits/stdc++.h> using namespace std; const int SIZE = 2e5+5; int t[SIZE<<2],a[SIZE]; int n,m; void pushup(int i){ t[i]=max(t[i
阅读全文
摘要:阅读前 By Xie Zheyuan. 这里有一份 《线段树学习笔记》 AC代码索引 里面有AC代码。 若有谬误,敬请在评论区指出。 简介 线段树是一个维护区间信息的数据结构。只要信息维护满足结合律,就可以使用线段树。 基本思路 例题 下面的思路介绍以 P3372 【模板】线段树 1 为例。 如题,
阅读全文
摘要:ST表概论 ST表是一个基于倍增思想的算法。不支持任何形式的修改,支持区间查询。 其中,维护的信息需要满足结合律和幂等律。 结合律:对于一个操作 ,有 \(\text{opt}(x,\text{opt}(y,z)) = \text{opt}(\
阅读全文
摘要:可持久化线段树支持访问一个数组的历史版本。复杂度 。 基础 维护三个信息,左子树,右子树,权值。 int top; struct zxs{ int l,r,v; } tree[(1e6)<<2]; 建树 int build(int v,int l,int r){ v=++t
阅读全文
摘要:存图 存图一般分为两种,邻接矩阵与邻接表(链式前向星)。 邻接矩阵 邻接矩阵比较简单,就是定义一个二维数组 ,然后 就是代表有一条有向边 。 空间复杂度为 , 为节点数。 示例代码如下: struc
阅读全文
摘要:基本思想 线段树(Segment Tree)是一种特殊的二叉树,每个节点维护一个区间,可以用来处理区间更新、单点修改、单点查询、区间查询的数据结构。 建树(build) 建树使用分治的思想,将一个区间 拆成两份,分别为 与 ,分别
阅读全文
摘要:例题 LeetCode 239. Sliding Window Maximum 可能没有办法注册,就点这里 题目 给你一个整数数组 nums,有一个大小为 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 个数字。滑动窗口每次只向右移动一位。 返回滑动窗
阅读全文
摘要:并查集是可以用来处理类似家谱的需要快速合并与查找祖先的一种集合性质的数据结构 并查集模板 // size:大小 compress:路径压缩 merge_rank:按秩合并 template<int size=2500,bool compress=true,bool merge_rank=true>
阅读全文
摘要:模拟退火介绍 模拟退火算法来源于固体退火原理,是一种基于概率的算法,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都达到平衡态,最后在常温时达到基态,内能减为最小。 来自百度百科 什么乱七八糟的 说白了就是求最小解。 看来学习
阅读全文
摘要:强连通 如果在有向图中, 与 存在一种路径,而 与 也存在一条路径,那么称与强连通。 如果任意两点都强连通,那么称这个图为强连通图。 如果一个非强连通图中存在一个最大的强连通图,那么称这个子图为 强连通分量。 比如说下图,1与2强连通,$Ed
阅读全文
摘要:介绍 拓扑排序作用在有向无环图(Directed Acyclic Graph,简称DAG)上。 拓扑排序干了这样一件事情:如果图上有一条边 ,那么排序后 一定在 前。或说是在不破坏DAG内部的顺序的前提下,将DAG拉直成一条链。 比如说下
阅读全文