Skip to content

泉州一中信息学Blog

信息学奥赛技术分享博客

  • 登录
  • 小学oj
  • 中学oj
  • 测试页面1
  • Toggle search form

2025暑假中山集训Day10——8.04

Posted on 2025年8月4日2025年8月10日 By 郑, 铭轩 2025暑假中山集训Day10——8.04无评论

早上7:30,我们来到了这与我们泉州第一中学有长达2个汉字的最长公共子序列的中山纪念中学。

上午

学算法和数据结构
1. Graham 扫描法

定义

是一个给定 n 个点,求这 n 个点所构成的凸包的算法

什么是凸包

凸多边形是指所有内角大小都在 [0,\pi] 范围内的 简单多边形。

在平面上能包含所有给定点的最小凸多边形叫做凸包。

实际上可以理解为用一个橡皮筋包含住所有给定点的形态。

性质:凸包用最小的周长围住了给定的所有点。

性质

Graham 扫描法的时间复杂度为 O(n\log n),复杂度瓶颈在于对所有点排序。

过程

首先找到所有点中,纵坐标最小的一个点 P。根据凸包的定义我们知道,这个点一定在凸包上。然后将所有的点以相对于点 P 的极角大小为关键字进行排序。

我们考虑从点 P 出发,在凸包上逆时针走,那么我们经过的所有节点一定都是「左拐」的。形式化地说,对于凸包逆时针方向上任意连续经过的三个点 P_1, P_2, P_3,一定满足 \overrightarrow{P_1 P_2} \times \overrightarrow{P_2 P_3} \ge 0。

新建一个栈用于存储凸包的信息,先将 P 压入栈中,然后按照极角序依次尝试加入每一个点。如果进栈的点 P_0 和栈顶的两个点 P_1, P_2(其中 P_1 为栈顶)行进的方向「右拐」了,那么就弹出栈顶的 P_1,不断重复上述过程直至进栈的点与栈顶的两个点满足条件,或者栈中仅剩下一个元素,再将 P_0 压入栈中。

代码实现

模板题

P2742 [USACO5.1] 圈奶牛Fencing the Cows /【模板】二维凸包
2. 旋转卡壳

引入

旋转卡壳(Rotating Calipers,也称「旋转卡尺」)算法,在凸包算法的基础上,通过枚举凸包上某一条边的同时维护其他需要的点,能够在线性时间内求解如凸包直径、最小矩形覆盖等和凸包性质相关的问题。

求凸包直径

定义

给定 n 个点,求求所有点对之间的最长距离

例题

P1452 【模板】旋转卡壳 | [USACO03FALL] Beauty Contest G

过程

首先使用任何一种凸包算法求出给定所有点的凸包,有着最长距离的点对一定在凸包上。而由于凸包的形状,我们发现,逆时针地遍历凸包上的边,对于每条边都找到离这条边最远的点,那么这时随着边的转动,对应的最远点也在逆时针旋转,不会有反向的情况,这意味着我们可以在逆时针枚举凸包上的边时,记录并维护一个当前最远点,并不断计算、更新答案。

求出凸包后的数组自然地是按照逆时针旋转的顺序排列,不过要记得提前将最左下角的 1 节点补到数组最后,这样在挨个枚举边 (i,i+1) 时,才能把所有边都枚举到。

枚举过程中,对于每条边,都检查 j+1 和边 (i,i+1) 的距离是不是比 j 更大,如果是就将 j 加一,否则说明 j 是此边的最优点。判断点到边的距离大小时可以用叉积分别算出两个三角形的面积并直接比较。

代码实现

3. 可持久化权值线段树(主席树)

引入

先引入一道题目:给定 n 个整数构成的序列 a,将对于指定的闭区间 [l, r] 查询其区间内的第 k 小值。

P3834 【模板】可持久化线段树 2

一种可行的方案是:使用主席树。 主席树的主要思想就是:保存每次插入操作时的历史版本,以便查询区间第 k 小。

解释

我们分析一下,发现每次修改操作修改的点的个数是一样的。都只更改了 O(\log{n}) 个结点,形成一条链,也就是说每次更改的结点数 = 树的高度。注意主席树不能使用堆式存储法,就是说不能用 x\times 2,x\times 2+1 来表示左右儿子,而是应该动态开点,并保存每个节点的左右儿子编号。

所以我们只要在记录左右儿子的基础上,保存插入每个数的时候的根节点就可以实现持久化了。

我们把问题简化一下:每次求 [1,r] 区间内的 k 小值。怎么做呢?只需要找到插入 r 时的根节点版本,然后用普通权值线段树(有的叫键值线段树/值域线段树)做就行了。

回到原问题——求 [l,r] 区间 k 小值。

我们可以发现,主席树统计的信息也满足这个性质。
所以如果需要得到 [l,r] 的统计信息,只需要用 [1,r] 的信息减去 [1,l – 1] 的信息就行了。

代码实现

4. 一种方便的数据结构——可并堆

例题

P11266 【模板】可并堆 2

思路

可以使用 pb_ds 库中的 priority_queue 来解决。

与标准库中的 priority_queue 相同,pb_ds 库中也实现了一个堆。不同的是,pd_ds 库中增加了删除和修改的操作。

下面介绍一下 priority_queue 的基本语法:

priority_queue 的头文件在 bits/extc++.h 中,但由于它不是一个标准 STL 库,还需要引用命名空间 __gnu_cxx。

priority_queue 定义声明方式:__gnu_pbds::priority_queue pq;

在本题中会用到一下的操作:
1. pq.push(x):将数字 x 放入堆中。
2. pq.top():返回堆顶的元素。
3. pq.erase(it):将迭代器 it 从堆中消除。
4. pq1.join(pq2):将 pq2 放入 pq1 中,同时清空 pq2。
5. pq.modify(it,x):将堆中迭代器为 it 的值改为 x。

代码实现

下午

打题目

晚上

打博客

训练日志

文章导航

Previous Post: 中山集训8.4
Next Post: 中山day10

发表回复 取消回复

要发表评论,您必须先登录。

2025年 12月
一 二 三 四 五 六 日
1234567
891011121314
15161718192021
22232425262728
293031  
« 8月    

2024常州 Class Classic OI Problems Contest cqr的长乐集训2023 CZYZ LOC New Game NOI NOIP Password Protected PM_PK Preview Problems Retrospect Selfmade Qusetion STL The end Training Uneasy Problem 蒟蒻 通报

  • 训练日志
  • 链表
  • 入门
  • 模拟
  • dfs序
  • 并查集
  • spfa
  • 最小割
  • 矩阵树定理
  • 仙人掌
  • BSGS
  • 凸包
  • 回文自动机
  • 递推与动归
  • 堆
  • 莫队算法
  • ST表
  • Treap
  • 树套树
  • 可持久化线段树
  • 初赛
  • 搜索
  • 贪心
  • 深度优先搜索
  • 欧拉图
  • dijkstra
  • 费用流
  • 哈夫曼树
  • kruskual
  • 置换
  • 旋转卡壳
  • KMP
  • 区间动归
  • STL
  • 链表
  • 可并堆
  • sply
  • 主席树
  • 可持久化字典树
  • 算法
  • 动态规划
  • 构造
  • 广度优先搜索
  • 最短路
  • floyd
  • 最大流
  • 虚树
  • prim
  • 筛法
  • 半平面交
  • 字典树
  • 背包动归
  • 基础数据结构
  • 分块
  • 线段树
  • 替罪羊树
  • K-DTree
  • 图论
  • 二分法
  • 迭代搜索
  • 拓扑排序
  • 有上下界网络流
  • 生成树
  • 快速幂
  • 后缀数组
  • 树形动归
  • 哈希表
  • 中级数据结构
  • 平衡树
  • 可持久化数据结构
  • 数据结构
  • 三分法
  • 启发式搜索
  • 图的连通
  • 点分治
  • 博弈论
  • AC自动机
  • 状压动归
  • 单调栈
  • 树状数组
  • 高级数据结构
  • OI资料
  • 数学
  • 高精度
  • 差分约束
  • 树上倍增
  • 素数测试
  • 后缀自动机
  • 数位动归
  • 单调队列
  • 新闻
  • 几何
  • 随机化
  • 二分图染色
  • 树链剖分
  • 欧拉函数
  • manacher
  • 斜率优化
  • 离线处理
  • 信息学奥赛学长风采
  • 字符串
  • 二分图匹配
  • prufer编码
  • 卡特兰数
  • 密码学
  • 决策单调
  • 赛后总结
  • 其他
  • 2-SAT
  • 最近公共祖先
  • 矩阵乘法
  • 记忆化搜索
  • 网络流
  • Link cut tree
  • 排列组合
  • 树
  • 高斯消元
  • 乘法逆元
  • 容斥原理
  • 调和级数
  • 概率与期望
  • 模线性方程组
  • 莫比乌斯反演
  • 快速傅里叶变换
  • 扩展欧几里德
  • 最大公约数与最小公倍数

近期文章

  • 中山纪念中学 Day21
  • 中山集训8.15 LAST DAY+集训小结
  • GDNOJ – DAY 18
  • 中山8.14
  • 2025暑假中山集训Day20——8.14

近期评论

归档

  • 2025年8月
  • 2025年7月
  • 2025年2月
  • 2025年1月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年3月
  • 2024年2月
  • 2024年1月
  • 2023年12月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年3月
  • 2023年2月
  • 2023年1月
  • 2022年12月

Copyright © 2025 泉州一中信息学Blog.

Powered by PressBook WordPress theme