Skip to content

Commit 79136b9

Browse files
committed
v1.0.1:增加和修改了部分内容
1 parent 1ee8674 commit 79136b9

4 files changed

Lines changed: 187 additions & 47 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
*.exe
22
*.pdf
33
*.log
4+
todo.md
45
.vscode/
56
code/.vscode/

README.md

Lines changed: 61 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
**当前最新版本为 `v1.0.0`** (总词数约7.7w(含代码))
1+
**当前最新普通版发布版本为 `v1.0.1`** **最新打印版发布版本为 `v1.0.0` (总词数约7.7w(含代码))**
22

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

5+
> 因打印版 `pdf` 目录页码制作困难,因此直到版本 `v1.1.0` 之前不会更新打印版,只会更新普通发布版
6+
57
<hr/>
68

79
## 模板简介
@@ -10,7 +12,7 @@
1012

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

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

@@ -38,43 +40,73 @@
3840
3941
> 部分代码源码在 `codes/`
4042
41-
<s>Starred it to keep trace of any possible updates!</s>
43+
<s>Star it to keep trace of any possible updates!</s>
4244

4345

4446

4547
## 更新日志
4648

47-
- 22/03/24
48-
- 开始模板编制工作
49-
- 增加部分数学公式、大部分 STL 内容
50-
- 22/03/25
51-
- 补充 STL 内容
52-
- 增加排序、组合数学、快读快写、高精度、树
53-
- 22/03/26
54-
- 补充树内容
55-
- 增加线段树、树状数组、平衡树等数据类型
56-
- 22/03/28
57-
- 增加加权并查集内容
58-
- 22/03/29
59-
- 增加整体二分、LIS、前缀和/差分内容
60-
- 增加了搜索、二分答案内容
61-
- 22/03/30
62-
- 增加了zkw线段树、猫树、K-D Tree内容,修改了部分内容
63-
- 增加了图概念、最短路内容
64-
- 22/03/31
65-
- 增加了拓扑排序、最小生成树、二分图匹配、网络流内容
66-
- 22/04/01
67-
- 增加了图的连通性、组合数学、数学杂项内容
49+
- 22/04/06 - 22/04/07 (`v1.0.1`)
6850

69-
- 22/04/02
70-
- 增加了数论主要内容、高等数学内容
51+
- 增加了位运算一节少量内容
52+
- 修改部分点分治笔记
53+
- 增加了 Java 快读快写
54+
- 增加可删堆,并与笛卡尔树、可并堆合并为堆专题
55+
56+
- 22/04/04 (`v1.0.0`)
57+
58+
- 稍微补充了少量内容
59+
- 发布了第一版模板
7160

7261
- 22/04/03
62+
7363
- 补充了数论、高等数学、杂项内容
7464
- 增加了博弈论、字符串、计算几何、线性代数和概率论、动态规划内容
7565

76-
- 22/04/04
77-
- 稍微补充了少量内容
78-
- 发布了第一版模板 (`v1.0.0`)
66+
- 22/04/02
67+
68+
- 增加了数论主要内容、高等数学内容
69+
70+
- 22/04/01
71+
72+
- 增加了图的连通性、组合数学、数学杂项内容
73+
74+
- 22/03/31
75+
76+
- 增加了拓扑排序、最小生成树、二分图匹配、网络流内容
77+
78+
- 22/03/30
79+
80+
- 增加了zkw线段树、猫树、K-D Tree内容,修改了部分内容
81+
- 增加了图概念、最短路内容
82+
83+
- 22/03/29
84+
85+
- 增加整体二分、LIS、前缀和/差分内容
86+
- 增加了搜索、二分答案内容
87+
88+
- 22/03/28
89+
90+
- 增加加权并查集内容
91+
92+
- 22/03/26
93+
94+
- 补充树内容
95+
- 增加线段树、树状数组、平衡树等数据类型
96+
97+
- 22/03/25
98+
99+
- 补充 STL 内容
100+
- 增加排序、组合数学、快读快写、高精度、树
101+
102+
- 22/03/24
103+
104+
- 开始模板编制工作
105+
- 增加部分数学公式、大部分 STL 内容
106+
107+
108+
109+
79110

111+
80112

code/quick_io.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import java.io.*;
2+
3+
public class quick_io {// Main
4+
static StreamTokenizer scanner = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
5+
static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
6+
7+
public static int nextInt() throws IOException {// 快约一倍
8+
scanner.nextToken();
9+
return (int) scanner.nval;
10+
}
11+
12+
public static long nextLong() throws IOException {
13+
scanner.nextToken();
14+
return (long) scanner.nval;
15+
}
16+
17+
static String next() throws IOException {
18+
scanner.nextToken();
19+
return scanner.sval;
20+
}
21+
22+
public static void main(String[] args) throws IOException {
23+
int n = nextInt() / 10;
24+
for (int i = 0; i < n; ++i) {
25+
int s = 0;
26+
for (int j = 0; j < 10; ++j) {
27+
s += nextInt();
28+
}
29+
out.println(s);// 实测快约4倍
30+
}
31+
out.close();// 没有的话什么也不输出
32+
}
33+
}

template.md

Lines changed: 92 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
![image-20220325120131181](img/image-20220325120131181.png)
88

9-
<div align="center" style="font-size:18px">Last built at Apr. 3, 2022</div>
9+
<div align="center" style="font-size:18px">Last built at Apr. 7, 2022</div>
1010

1111
<div STYLE="page-break-after: always;"></div>
1212

@@ -2389,6 +2389,8 @@ signed main()
23892389
}
23902390
```
23912391
2392+
如果每次以某个端点为原点进行极角排序,再枚举线段第二端点,配合单调栈,可以用 $O(n^2\log n)$ 实现枚举(但是处理概率连乘积乘除特别是 $1$ (对应概率为 $0$ )比较麻烦),暂时没有什么好的实现方法
2393+
23922394
23932395
23942396
#### 扫描线
@@ -4357,10 +4359,6 @@ signed main()
43574359
43584360
43594361
4360-
#### 李超线段树
4361-
4362-
4363-
43644362
#### 主席树
43654363
43664364
##### 可持久化数组
@@ -4949,8 +4947,6 @@ signed main()
49494947
49504948
49514949
4952-
4953-
49544950
### 平衡树
49554951
49564952
使用示例:(洛谷P6136) (目前该题平衡树均为别人的代码,后续版本可能改)
@@ -5520,7 +5516,45 @@ int main() {
55205516
55215517
55225518
5523-
### 笛卡尔树
5519+
### 堆
5520+
5521+
#### 可删堆
5522+
5523+
> 例题:P2056洛谷(的一部分)
5524+
5525+
以 $O(\log n)$ 均摊实现:①插入任意值 ②删除指定值 ③求最大值
5526+
5527+
> 若要求次大值,可以弹两次堆顶,再把第一次弹的压进去,最后返回第二次弹的结果
5528+
5529+
```c++
5530+
struct heap //可删堆(大根堆)
5531+
{
5532+
priority_queue<ll> a, b;
5533+
void insert(ll x) { a.push(x); }
5534+
void erase(ll x) { b.push(x); }
5535+
ll top()
5536+
{
5537+
while (!b.empty() && a.top() == b.top())
5538+
{
5539+
a.pop(), b.pop();
5540+
}
5541+
return a.top();
5542+
}
5543+
ll pop()
5544+
{
5545+
ll t = top();
5546+
a.pop();
5547+
return t;
5548+
}
5549+
ll size() { return a.size() - b.size(); }
5550+
}
5551+
```
5552+
5553+
5554+
5555+
5556+
5557+
#### 笛卡尔树
55245558
55255559
节点由 $(k,w)$ 组成, $k$ 满足二叉搜索树, $w$ 满足堆,若 $(k,w)$ 分别互不相同,那么结构唯一
55265560
@@ -5568,11 +5602,7 @@ signed main()
55685602
55695603
55705604
5571-
> ### 树套树
5572-
5573-
5574-
5575-
### 可并堆
5605+
#### 可并堆
55765606
55775607
左偏树。支持在 $O(\log n)$ 的时间复杂度内进行合并的堆式数据结构
55785608
@@ -7148,7 +7178,7 @@ signed main()
71487178
71497179
经过点分治,可以求出满足可加的每一条路径的值。点分治的复杂度是 $O(n\log n)$
71507180
7151-
> 例题洛谷P3806:$n(1\le n\le10^4)$ 点带权树,$m(1\le m\le100)$ 次询问,每次询问求树上是否有距离为 $k$ 个点对,有就输出 `AYE`
7181+
> 例题洛谷P3806:$n(1\le n\le10^4)$ 点带边权树,$m(1\le m\le100)$ 次询问,每次询问求树上是否有距离为 $k$ 的点对,有就输出 `AYE`
71527182
>
71537183
71547184
```c++
@@ -7162,7 +7192,7 @@ typedef long long ll;
71627192
struct edge
71637193
{
71647194
ll to, nx, w;
7165-
} e[mn << 2];
7195+
} e[mn << 1];
71667196
ll hd[mn], ecnt;
71677197
void adde(ll &u, ll &v, ll &w)
71687198
{
@@ -12630,7 +12660,7 @@ $$
1263012660
1263112661
内建函数:
1263212662
12633-
- 注:对 `unsigned long long` 每个函数名后面加上 `ll`
12663+
- 注:对 `unsigned long long` 每个函数名后面加上 `ll` (传入的是什么类型不影响结果, 影响的是函数名)
1263412664
1263512665
**1.__builtin_popcount(unsigned int n)**
1263612666
@@ -12681,6 +12711,8 @@ cout<< 32 - __builtin_clz(n) <<endl; //输出1
1268112711
cout<< 64 - __builtin_clzll(m) <<endl; //输出4
1268212712
```
1268312713
12714+
应用:`31 - __builtin_clz(n)` 等效于 $\lfloor\log_2n\rfloor$
12715+
1268412716
1268512717
1268612718
#### 指针
@@ -13305,12 +13337,54 @@ Python:
1330513337
1330613338
```python
1330713339
import sys
13308-
input = sys.stdin.readline
13309-
print = sys.stdout.write # 仅字符串输出
13340+
input = sys.stdin.readline # 实测约快10倍
13341+
print = sys.stdout.write # 仅字符串输出(注意不会换行)
13342+
```
13343+
13344+
13345+
13346+
Java
13347+
13348+
```java
13349+
import java.io.*;
13350+
13351+
public class Main {
13352+
static StreamTokenizer scanner = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
13353+
static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
13354+
13355+
public static int nextInt() throws IOException {// 快约一倍
13356+
scanner.nextToken();
13357+
return (int) scanner.nval;
13358+
}
13359+
13360+
public static long nextLong() throws IOException {
13361+
scanner.nextToken();
13362+
return (long) scanner.nval;
13363+
}
13364+
13365+
static String next() throws IOException {
13366+
scanner.nextToken();
13367+
return scanner.sval;
13368+
}
13369+
13370+
public static void main(String[] args) throws IOException {
13371+
int n = nextInt() / 10;
13372+
for (int i = 0; i < n; ++i) {
13373+
int s = 0;
13374+
for (int j = 0; j < 10; ++j) {
13375+
s += nextInt();
13376+
}
13377+
out.println(s);// 实测快约4倍
13378+
}
13379+
out.close();// 没有的话什么也不输出
13380+
}
13381+
}
1331013382
```
1331113383
1331213384
1331313385
13386+
13387+
1331413388
#### 其他
1331513389
1331613390
```c++

0 commit comments

Comments
 (0)