题目大意
这篇笔记对应的是「set 自定义 cmp 排序」:讲的是在 C++ 里如何为 set(以及类似容器)自定义比较器 cmp,从而改变元素的排序规则(例如从大到小排序),以及与默认比较方式的区别。
1 |
|
1 | 4 |
优先队列的比较符号是反的,解释详情见
https://www.nowcoder.com/discuss/353157988535967744
1 |
|
1 | 1 1 |
这篇笔记对应的是「set 自定义 cmp 排序」:讲的是在 C++ 里如何为 set(以及类似容器)自定义比较器 cmp,从而改变元素的排序规则(例如从大到小排序),以及与默认比较方式的区别。
1 | #include <iostream> |
1 | 4 |
优先队列的比较符号是反的,解释详情见
https://www.nowcoder.com/discuss/353157988535967744
1 | #include <iostream> |
1 | 1 1 |
Wine 如何打开devcpp
wine “/Users/zzy/.wine/drive_c/Program Files (x86)/Dev-Cpp/devcpp.exe”
维护一个动态可重集合 M,需要支持以下操作:
插入一个数 x。
删除一个数 x(若有多个相同值,只删除一个)。
查询集合中严格小于 x 的元素个数,并将结果加 1 输出。
查询集合按从小到大排序后,第 x 小的数。
查询 x 的前驱:小于 x 且最大的数(不保证 x 在集合中,但保证答案存在)。
查询 x 的后继:大于 x 且最小的数(不保证 x 在集合中,但保证答案存在)。
主要是发现此题寻找第k大的连通块需要平衡二叉树,不学不行,故来学习。
参考博客
https://writings.sh/post/fhq-treap
其他OJ
参考视频
1 | #include<bits/stdc++.h> |
有 n 座岛(编号 1simn),每座岛有一个“重要度排名” pi(是 1∼n 的一个排列,数值越小表示越重要)。初始有 m 座桥形成无向图,之后还会有 q 次操作:
B x y:在岛 x 与 y 之间新建一座桥。
Q x k:在当前与岛 x 连通的所有岛中,找出“重要度排名第 k 小”的岛,输出该岛编号;若不存在则输出 −1。
1 |
40pts,TLE,不用平衡树stl的set合并太慢了。
1 | //https://www.luogu.com.cn/problem/P3224 |
给定一个有 N 个点、初始没有边的无向图,按顺序处理 Q 个操作:
操作 1:在 u 与 v 之间新增一条边。
操作 2:询问与点 v 连通的所有点中,点编号第 k 大的是多少;如果连通块大小不足 k,输出 -1。(题目保证 kle10)
这题总体上来说还是不难的,就是用并查集维护连通块,再用set维护第k大的点
1 | // https://atcoder.jp/contests/abc372/tasks/abc372_e |