Skip to content

Commit 3af0d3e

Browse files
committed
v1.2.0:添加若干算法模板,修改和移除若干内容
1 parent 7751bcf commit 3af0d3e

16 files changed

Lines changed: 3232 additions & 115 deletions

README.md

Lines changed: 293 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
**当前最新普通版发布版本为 `v1.1.2`****最新打印版发布版本为 `v1.1.0` (总词数约9.0w(含代码))**
1+
**当前最新普通版发布版本为 `v1.2.0`****最新打印版发布版本为 `v1.2.0` (总词数约10.0w(含代码))**
22

33
成品为 `template.pdf` (移步 [releases](https://github.com/lr580/algorithm_template/releases) 查看/下载)
44

5-
> 因打印版 `pdf` 目录页码制作困难,因此直到版本 `v1.2.0` 之前不会更新打印版,只会更新普通发布版。另,由于本人退役,未来预计将不会有大更新。
5+
> 因打印版 `pdf` 目录页码制作困难,因此直到版本 `v1.3.0` 之前不会更新打印版,只会更新普通发布版。另,由于本人退役,未来预计将不会有大更新。
66
77
<hr/>
88

@@ -12,7 +12,7 @@
1212

1313
本模板主要浓缩提炼自我的算法笔记(三份笔记,折合约28.5万+2.5万+5万=36万字(含代码)),历时约两周爆肝制成,因时间仓促,难免可能产生纰漏,如果您发现了任何错误之处或者如果您对本模板的内容增删改有任何意见或建议,欢迎您随时提出 >_<
1414

15-
> 目前版本使用 Typora 制作,有生之年有概率考虑使用 LaTeX 重做本模板。碍于本人技术有限,目前目录页码是手动制作的(使用Adobe Acrobat DC逐目录项修改),因此可能会出现页码不正确,若发现欢迎纠正
15+
> 目前版本使用 Typora 制作,有生之年有概率考虑使用 LaTeX 重做本模板。碍于本人技术有限,目前目录页码是手动制作的(使用 Adobe Acrobat DC 逐目录项修改),因此可能会出现页码不正确,若发现欢迎纠正
1616
1717
目前模板收录的模块大致如下:(具体请参见详细目录)
1818

@@ -32,7 +32,7 @@
3232

3333
6. 杂项
3434

35-
主要含排序、二分、搜索、高精度、STL等
35+
主要含排序、二分、搜索、高精度、STL 等
3636

3737
正文源码在 `template.md` 文件中
3838

@@ -44,18 +44,305 @@
4444

4545

4646

47+
## 参考目录
48+
49+
```
50+
lr580's 算法模板
51+
数学
52+
公式
53+
常用符号
54+
组合数学
55+
排列组合
56+
卡特兰数
57+
斯特林数
58+
生成函数
59+
球盒问题
60+
其他
61+
分拆数
62+
贝尔数
63+
欧拉数
64+
复杂度
65+
数列
66+
高等数学
67+
线性代数
68+
概率论
69+
其他
70+
数论
71+
基础性质
72+
素数
73+
素性测试
74+
埃氏筛
75+
欧拉筛
76+
pollard-rho算法
77+
Meissel-Lehmer算法
78+
拓展欧几里得定理
79+
取模公式
80+
欧拉函数
81+
中国剩余定理
82+
BSGS
83+
计算几何
84+
向量
85+
线段
86+
点到直线距离
87+
线段相交判定
88+
直线交点
89+
点在直线投影
90+
多边形
91+
极角排序
92+
凸包
93+
Graham
94+
Andrew
95+
直径
96+
点与凸包相交
97+
两凸包相交
98+
扫描线
99+
杂项
100+
Pick定理
101+
平面最近点对
102+
随机增量法
103+
博弈论
104+
多项式
105+
FFT
106+
NTT
107+
分治 FFT
108+
FWT
109+
拉格朗日插值法
110+
杂项
111+
矩阵加速
112+
高斯消元
113+
康托展开
114+
自适应辛普森法
115+
数据结构
116+
ST表
117+
线段树
118+
常见应用
119+
区间加法
120+
区间加乘
121+
区间查重
122+
区间最值
123+
历史最值
124+
zkw线段树
125+
单点修改
126+
区间修改
127+
猫树
128+
主席树
129+
可持久化数组
130+
静态区间第k小
131+
树状数组
132+
静态区间最值
133+
动态整体第k小
134+
动态区间第k小
135+
二维树状数组
136+
平衡树
137+
FHQ-Treap
138+
AVL
139+
Splay
140+
K-D Tree
141+
142+
可删堆
143+
笛卡尔树
144+
可并堆
145+
珂朵莉树
146+
并查集
147+
种类并查集
148+
加权并查集
149+
可撤销并查集
150+
可持久化并查集
151+
图论
152+
153+
重心
154+
直径
155+
最近公共祖先
156+
树上k级祖先
157+
LCA应用
158+
前缀和差分
159+
两点距离
160+
路径相交
161+
其他
162+
树链剖分
163+
启发式合并
164+
虚树
165+
点分治
166+
Prufer 序列
167+
二叉树遍历
168+
先中求后
169+
中后求先
170+
先后求中
171+
杂项
172+
随机游走
173+
最小距离和
174+
基本概念
175+
最短路
176+
floyd
177+
Bellman-Ford
178+
SPFA
179+
Dijkstra
180+
Johnson
181+
差分约束
182+
拓扑排序
183+
最小生成树
184+
kruskal
185+
prim
186+
Borůvka
187+
严格次小生成树
188+
连通性
189+
连通分量
190+
强连通分量
191+
割点
192+
193+
点双连通分量
194+
边双连通分量
195+
圆方树
196+
2-SAT
197+
匹配问题
198+
网络流
199+
最大流
200+
EK 算法
201+
Dinic算法
202+
最小费用最大流
203+
最小割
204+
杂项
205+
欧拉图
206+
哈密顿图
207+
竞赛图
208+
动态规划
209+
模板
210+
背包问题
211+
字符DP
212+
树上DP
213+
区间DP
214+
状压DP
215+
数位DP
216+
杂项
217+
最长公共子序列
218+
编辑距离
219+
约瑟夫问题
220+
字符串
221+
字符串哈希
222+
KMP
223+
manacher
224+
字典树
225+
AC自动机
226+
后缀数组
227+
基础
228+
LCP
229+
SA-IS
230+
后缀自动机
231+
FFT字符串匹配
232+
子序列自动机
233+
最小表示法
234+
Lyndon分解
235+
杂项
236+
排序
237+
计数排序
238+
基数排序
239+
归并求逆序对
240+
二分
241+
最长单调序列
242+
最长公共排列
243+
二分答案
244+
最小中位数子矩阵
245+
最大子串平均值
246+
其他
247+
整体二分
248+
wqs二分
249+
前缀和/差分
250+
搜索
251+
IDA*
252+
双向搜索
253+
折半搜索
254+
随机化
255+
莫队
256+
普通
257+
带修
258+
树上
259+
回滚
260+
高精度
261+
C++
262+
FFT 乘法
263+
java 高精度
264+
python 高精度
265+
悬线法
266+
程序语法
267+
常规运算
268+
位运算
269+
指针
270+
I/O
271+
其他
272+
STL
273+
函数
274+
xx_bound
275+
字符串
276+
正则表达式
277+
随机数
278+
杂项
279+
数据结构
280+
string
281+
vector
282+
set
283+
map
284+
bitset
285+
其他
286+
pb_ds
287+
卡常
288+
快读/写
289+
其他
290+
```
291+
292+
293+
47294
## 更新日志
48295

296+
- 23/10/19 - 23/10/21 (`v1.2.0`)
297+
298+
- 添加了快速矩阵前 n 项和模板
299+
300+
- 添加了最小割模板
301+
302+
- 微调了 SG 定理应用
303+
304+
- 重制了部分求导、积分等高数公式表
305+
306+
- 添加了多项式全家桶、斯特林数、按列分拆数模板
307+
308+
- 微加了 STL 内容
309+
310+
- 添加了点在凸包、凸包交判定(闵可夫斯基和)模板
311+
312+
- 添加了最小边覆盖模板
313+
314+
- 微加了最短路应用
315+
316+
- 微加了 LIS 应用
317+
318+
- 添加了子序列自动机
319+
320+
- 添加了 FWT 模板
321+
322+
- 删除了最小成本排序例题
323+
324+
- 微加了归并排序应用
325+
326+
- 添加了枚举子集模板、数位 DP 模板
327+
328+
- 微加了 KMP, manacher 应用
329+
330+
- 添加了 wqs 二分内容
331+
332+
- 添加了悬线法模板
333+
334+
- 重制了编辑距离模板
335+
49336
- 22/11/20 - 22/12/3 (`v1.1.2`)
50337

51338
- 添加了整数三分代码
52-
339+
53340
- 修改了部分 KMP / 字符串例题描述
54341
- 添加了 prim 暴力模板和最小生成树输出方案代码
55342
- 添加了 floyd 输出方案代码
56343
- 微加了 manacher 内容
57344
- 添加了上下取整及其不等式公式
58-
345+
59346
- 22/10/24 - 22/11/11 (`v1.1.1`)
60347

61348
- 添加了树上随机游走

code/binary_search_wqs.cpp

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iii/
2+
// https://oi-oj.socoding.cn/p/1069
3+
#include <bits/stdc++.h>
4+
using namespace std;
5+
using ll = long long;
6+
signed main()
7+
{
8+
ll k, n;
9+
cin >> n >> k;
10+
vector<ll> p(n);
11+
for (int i = 0; i < n; ++i)
12+
{
13+
cin >> p[i];
14+
}
15+
ll lf = 1, rf = *max_element(p.begin(), p.end());
16+
ll ans = -1;
17+
while (lf <= rf)
18+
{
19+
ll cf = (lf + rf) >> 1; // 斜率
20+
ll buycnt = 0, sellcnt = 0;
21+
ll buyp = -p[0], sellp = 0;
22+
for (int i = 1; i < n; ++i) // 贪心
23+
{
24+
if (sellp - p[i] >= buyp)
25+
{
26+
buyp = sellp - p[i];
27+
buycnt = sellcnt;
28+
}
29+
if (buyp + p[i] - cf >= sellp)
30+
{
31+
sellp = buyp + p[i] - cf;
32+
sellcnt = buycnt + 1;
33+
}
34+
}
35+
// cout << cf << ' ' << sellp << ' ' << sellcnt << '\n';
36+
if (sellcnt >= k)
37+
{
38+
ans = sellp + k * cf; // 注意不是+sellcnt,是+k
39+
lf = cf + 1;
40+
}
41+
else
42+
{
43+
rf = cf - 1;
44+
}
45+
}
46+
if (ans == -1)
47+
{
48+
ans = 0;
49+
for (int i = 1; i < n; ++i)
50+
{
51+
ans += max(p[i] - p[i - 1], 0LL);
52+
}
53+
}
54+
cout << ans;
55+
return 0;
56+
}
57+
/*
58+
8 3
59+
1 100 1 4 1 4 1 4
60+
*/

0 commit comments

Comments
 (0)