摘要:
\(1.\) 用 special judge 将下发 spj.cpp 按 F12 运行一下, win+R 打开 cmd,将 spj.exe 拖进去,再将 输入文件 1.in 拖进去, 再将 自己的 输出文件 my.out 拖进去,再将 输出文件 1.out 拖进去,按enter ,检查是否正确。 \ 阅读全文
摘要:
一.普通线段树 线段树(Segment Tree)几乎是算法竞赛最常用的数据结构了,它主要用于维护区间信息(要求满足结合律)。与树状数组相比,它可以实现 \(O(logn)\) 的区间修改,还可以同时支持多种操作(加、乘),更具通用性。 接下来我们用这道模板题为例,看看线段树是怎么维护区间和这一信息 阅读全文
摘要:
1.算法简介 网络 一个网络 \(G = (V,E)\) 是一张有向图,图中每条有向边 \((x,y) \in E\) 都有一个给定的权值 \(c(x,y)\) ,称为边的的容量。特别的,若 \((x,y) \notin E\), 则 \(c(x,y) = 0\)。图中还有两个指定的特殊节点 \(S 阅读全文
摘要:
Treap Splay 无旋Treap——fhq treap 简介 就是没有旋转操作的 Treap,一些性质什么的都跟 Treap 类似。 算法介绍 (1)merge(x,y) 将两棵“有序”(x中元素的权值最大值小于 y 中元素权值最小值)的Treap合并成一棵。 int ch[N][2], sz 阅读全文
摘要:
介绍 一维前缀和 : $ s[i] = s[i - 1] + a[i] $ 二维前缀和: $s[i][j] = s[i][j - 1] + s[i - 1][j] - s[i - 1][j - 1] $ 当然也可以这么写: for(int i = 1; i <= n; i++) for(int j 阅读全文
摘要:
定义与性质 笛卡尔树是一种二叉树,每一个结点由一个键值二元组 \((k,w)\) 构成。要求 \(k\) 满足二叉搜索树的性质,而 \(w\) 满足堆的性质。 ,也就是说,对于一个节点 \(i\) 的左儿子 \(l_i\) 和右儿子 \(r_i\),一定满足 \(l_i<i<r_i\)(下标 \(k 阅读全文
摘要:
首先,严格地讲,基环树不是树,它是一张有 \(n\) 个节点、\(n\) 条边的图。 介绍 无向图上的基环树 有向图上的基环树 内向树 出度为 1 外向树 入度为 1 流程 找到唯一的环; 对环之外的部分按照若干棵树处理; 考虑与环一起计算。 找环 从任意一点开始搜索; 每次拓展到的点涂为灰色,回溯 阅读全文
摘要:
1.算法简介 整体 DP 就是用线段树合并维护 DP。 有一些问题,通常见于二维的DP,有一维记录当前x的信息,但是这一维过大无法开下,O(nm) 也无法通过。 但是如果发现,对于 x,在第二维的一些区间内,取值都是相同的,并且这样的区间是有限个,就可以批量处理。 所以我们就可以用线段树来维护 DP 阅读全文
摘要:
cdq 分治 基本思想 我们要解决一系列问题,这些问题一般包含修改和查询操作,可以把这些问题排成一个序列,用一个区间[L,R]表示。 分。递归处理左边区间 \([L,M]\) 和右边区间 \([M+1,R]\) 的问题。 治。合并两个子问题,同时考虑到 \([L,M]\) 内的修改对 \([M+1, 阅读全文
摘要:
复杂度计算 ①.主定理 ($T(n) = a T(\frac{n}{b}) + f(n) $ 型) ②. 分层 (\(T(n)=k\sqrt{n}T(\sqrt{n})+n\) 型) 相当于将 \(n\) 分成若干层,层数 \(c\)。 最底层的大小大约为2(因为大小为1时不好计算,且2很接近1了) 阅读全文