当前位置: 首页 > news >正文

学习笔记

数据结构

莫队

优秀的暴力,我觉得这个算法非常具有美感。
巧妙运用了分块的思想。
莫队主要解决区间问题,适用范围是当前的区间 \(l,r\) 的答案可以从 \(l-1,r\)\(l,r-1\) 转移而来且支持离线。
首先对原序列进行分块,接着根据当前区间左端点所属块对询问离线后排序。接着按照上述做法暴力计算每个区间。
时间复杂度 \(O(n\sqrt{n})\),证明略。
一些细节:莫队一般需要卡常,有几个常见优化如下。

  1. 奇偶排序:如果左端点相同按照左端点的奇偶性,对右端点进行排序,如果左端点为奇数,右端点递增排序;左端点为偶数,右端点递减排序。
  2. 块长:设置为 \(n/\sqrt m\) 一般较优,也可以直接分析完之后在代码中计算或手动计算一个块长。

相关题目:

P2709 小B的询问
P1903 [国家集训队] 数颜色 / 维护队列
P3709 大爷的字符串题

线段树

动态开点

普通线段树中一般节点会有很多浪费,很大一部分节点不会被用到,如果题目卡空间,需要使用动态开点
比较好理解的一个优化,大致思想就是节点被用到了再开,然后在结构体中记录节点的左右儿子。

权值线段树

这一类线段树较为特殊,一般维护的是原序列的某个权值,较为常见的是维护数的出现次数。
比如题目要求求出大小在 \(l,r\) 范围内的数有多少个,这时候就可以使用权值线段树来维护。
如果题目数据范围较大,需要使用到动态开点。

可持久化线段树

主要思想是对于每次新增的版本不新开整一个线段树,而是在原来的基础上新增被修改的点。由于每次被修改的点最多只有 \(logn\)个,因此空间复杂度从 \(n^2\) 优化到了 \(nlogn\)

主席树

同时利用了权值线段树和可持久化还有动态开点。
以模板题静态区间第 \(k\) 小为例子。
对于原序列的每个数建一个版本。
可以发现 \(l,r\) 区间内每个值域的 \(cnt\) 应为第 \(r\) 个版本的 \(cnt\) 减去第 \(l-1\) 个版本的 \(cnt\)
于是双指针在主席树上同步搜索 \(l,r\) 的第 \(k\) 小。

图论

网络流

网络流的题目一般难点在于建模。但我一开始学网络流被卡在了反向边那里。
感性理解了一下,反向边主要解决的是在求一次增广路途中可能找到的不是最优的,而利用反向边可以进行一个反悔操作。

EK

用bfs不停找增广路,然后扩充最大流量,时间复杂度较劣,有时候懒得打dinic了可以用用。

dinic

先用一遍bfs给每个节点标上层次,然后再用dfs找增广路。时间复杂度较优,且实现难度不大,常用。

最小割最大流定理

最小割数=最大流

相关题目:

P2472 [SCOI2007]蜥蜴
P4001 [ICPC-Beijing 2006] 狼抓兔子


开始动笔:2025/9/7
upd:新增线段树部分的知识和部分知识点的补充 2025/9/9

http://www.rkmt.cn/news/1854.html

相关文章:

  • 01_TCP协议概念
  • 【A】chipi chipi chapa chapa
  • linux安装python
  • 【IEEE、电力学科品牌会议】第五届智能电力与系统国际学术会议(ICIPS 2025)
  • CE第9关X64版本问题记录
  • 多态
  • 数学分析 I note
  • 记录一下由于VS中qt的插件自动升级引发的编译问题
  • ck随笔
  • 终结“网络无助感”:Tenable CEO解析漏洞管理与安全心态
  • 生产搭建Hadoop
  • 生产搭建Rabbitmq
  • macOS Tahoe 26 RC (25A353) Boot ISO 原版可引导镜像下载
  • 企业如何选型低代码平台?4款产品测评
  • torch版本应该跟cuda、cudacnn的版本一致
  • 安装mysql数据库,从下载到配置的详细教程
  • [BJOI2018] 染色 题解
  • 金蝶云星空学习记录1
  • (简记)虚树
  • AI测试平台自动遍历:低代码也能玩转全链路测试
  • Cesium Shader内置变量 czm_*
  • IDA Pro 9.2 发布 - 强大的反汇编程序、反编译器和多功能调试器
  • Java 那些基础又关键的事儿
  • Codeforces Round 1047 (Div. 3)
  • 设计模式-策略
  • 数据库基本查询语句
  • 《Python数据结构与算法分析》代码
  • jmeter测试mysql
  • Docker容器
  • models中integer、char、Boolean、text、datetime字段类型的常用参数设置