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;
71627192struct edge
71637193{
71647194 ll to, nx, w;
7165- } e[mn << 2 ];
7195+ } e[mn << 1 ];
71667196ll hd[mn], ecnt;
71677197void 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
1268112711cout<< 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
1330713339import 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