算法笔记
文章平均质量分 92
信息学奥赛算法
ZCETHAN
少年的悲哀,毕竟是易消的残雪
展开
-
ZCETHAN の板子们
CSP 赛前的模板复习。其中代码一般以洛谷模板题为基础。变量类型一般为 int,数据范围一般为 10510^5105,算法范围一般为 提高级 。具体还是看代码。LIST:数据结构倍增表(ST 表)线段树树状数组SAM笛卡尔树TreapSplayFHQ-Treap数据结构倍增表(ST 表)QQQ 次询问长度为 nnn 区间内的最大值。#include<bits/stdc++.h>#define ll long long#define inf (1<<30)#def原创 2021-10-22 19:47:59 · 214 阅读 · 0 评论 -
2021 CSP-S 初赛知识补天
前面的话近几年的初赛,尤其是题型变成选择后,对计算机基础知识的要求不那么高,反而对程序理解、数学知识之类的东西是愈加重视。所以,我在这两方面选取了几类不是那么好做的题型,分享做法。特征方程这种题目通常是给出二项递推式,形如 cf(n)=af(n−1)+bf(n−2)cf(n)=af(n-1)+bf(n-2)cf(n)=af(n−1)+bf(n−2),然后让你写出,在 nnn 不断增大的过程中,f(n)f(n)f(n) 趋近于多少。我以前的做法是强算到 f(7)f(7)f(7) 左右,然后选一个最接原创 2021-09-17 12:11:30 · 545 阅读 · 0 评论 -
学习笔记——Splay
前言前几天有幸听学长讲平衡树,想着好久没写博客了,记录一下。简介Splay,平衡树的一种,依靠每次将访问到的点旋到根来保持树的平衡。并且,Splay 还可以高效解决序列翻转等操作。实现前提以下代码是基于这样的定义的:struct Tree{int ch[2],val,siz,fa;}nd[MAXN];//表示某一个节点void pushup(int rt){nd[rt].siz=nd[nd[rt].ch[0]].siz+nd[nd[rt].ch[1]].siz+1;}//更新某个节点子树的原创 2021-07-30 21:12:33 · 129 阅读 · 0 评论 -
学习笔记——斜率优化 dp
引入斜率优化,是单调队列优化的一个进阶版本,为了更好地理解,先来回顾一下单调队列吧~所谓单调队列优化,就是对于形如:dpi=max{dpj+aj}dp_i=\max\{dp_j+a_j\}dpi=max{dpj+aj}的 dpdpdp 式,我们把所有的 dpj+ajdp_j+a_jdpj+aj 放进单调队列里,实现 O(1)O(1)O(1) 的转移。这个时候,只有在式子中,每一项只有关于 jjj 或者只有关于 iii 的。但是如果有这样一个式子:dpi=max{dpj+aj×a原创 2021-05-18 10:50:53 · 331 阅读 · 0 评论 -
学习笔记——二分图及建图技巧
简介二分图是一种特殊的图。其定义为:节点由两个集合组成,且两个集合内部没有边的图。那啥时候可以用二分图呢?当且仅当图可以进行合法的黑白染色的时候,可以考虑二分图。二分图匹配匈牙利算法最基础的问题就是二分图的最大匹配。所谓最大匹配,就是对于左右两个集合内的点,每个点都只能选一次,并且左右匹配的点之间有连边,求最多能左右匹配的点对数。举个最简单的例子,就是有 nnn 个男生和 mmm 个女生,之间有相互喜欢的关系,求最终最多能牵几根红线。由于这个问题比较基础,所以具体可以看网上其它博客,这里仅原创 2021-04-13 20:29:15 · 546 阅读 · 0 评论 -
学习笔记——高斯消元
简介高斯消元是一个用于求方程组的解的算法。在线性代数中非常重要。一般而言,其复杂度为O(n3)O(n^3)O(n3),可以承受200200200及以下的数据范围(当然有的题目时限是10000ms10000ms10000ms什么的,特殊情况特殊对待)。算法理解考虑一个二元一次方程组怎么解。{a1x1+a2x2=a3b1x1+b2x2=b3\begin{cases}a_1x_1+a_2x_2=a_3\\b_1x_1+b_2x_2=b_3\end{cases}{a1x1+a2x2=a3b1x1原创 2021-02-05 18:14:19 · 240 阅读 · 1 评论 -
Kruskal重构树(AT1998 Stamp Rally)
引入大家都知道KruskalKruskalKruskal求最小生成树吧,这个算法就是建立在前面说的算法的基础上的一个奇妙的想法。有这么一个问题,给你一张图,每条边都有权值,然后规定一堆东西后问:满足条件的路径中,所经过边权最大值最小是多少。初步想法二分,一定是最先想到的,我们接下来就以标题中的那题为例讲讲这个算法。我们很容易想到二分最大边权,然后验证。但是每次验证都跑dfsdfsdfs肯定得炸。那么怎么办呢。来看看重构树算法的实现吧。实现首先,根据KruskalKruskalKruskal原创 2021-01-03 16:09:53 · 97 阅读 · 0 评论 -
ST表-RMQ问题(洛谷P3865)
前置芝士用倍增思想求静态区间最值(无法求和)。dp[i][k]dp[i][k]dp[i][k]表示区间[i,i+2k−1][i,i+2^k-1][i,i+2k−1]的最大或最小值。预处理O(nlogn)O(n\log n)O(nlogn)则dp[i][0]=a[i]dp[i][0]=a[i]dp[i][0]=a[i]。则:dp[i][j]=min/max(dp[i][j−1],dp[i+2j−1][j−1])dp[i][j]=min/max(dp[i][j-1],dp[i+2^{j-1}][j原创 2020-11-05 20:07:49 · 126 阅读 · 0 评论 -
虚树(Kindom and its Cities,消耗战)
例题先来看一道例题,CF上的。这题的意思是给定一棵有nnn个节点的树,树上有一些关键点(keykeykey)。接下来有qqq组询问,每次给出mmm个关键点,要求删去一些点,使得这些关键不相连。要求删去的最少的点数。例题解析第一眼看到这题,先想到的肯定是树形dpdpdp。毕竟是在树上嘛。但是接下来看了一眼范围1≤n≤1000001\le n\le 1000001≤n≤100000,而且1≤q≤1000001\le q\le 1000001≤q≤100000。如果对于每个qqq都建一次完整的树,那么显然原创 2020-07-30 23:06:09 · 329 阅读 · 3 评论