【学习笔记】数据结构
其实没有什么主题但是总想写点文字水一下
今天状态不是很好
Sanae and Giant Robot
- 2500 的评分低了吧 。
- 对于以 i i i 结尾的子段,定义 p [ i ] p[i] p[i] 表示最大的使得 ∑ j = p [ i ] i a i = ∑ j = p [ i ] i b i \sum_{j=p[i]}^ia_i=\sum_{j=p[i]}^ib_i ∑j=p[i]iai=∑j=p[i]ibi 的位置
- 对于一个操作 [ l , r ] [l,r] [l,r] ,相当于任意 l ≤ i ≤ r l\le i\le r l≤i≤r , p [ i ] = i p[i]=i p[i]=i
- 注意到每个位置最多只会操作一次
- 事实上考虑 i → p [ i ] − 1 i\to p[i]-1 i→p[i]−1 ,操作 [ l , r ] [l,r] [l,r] 合法当且仅当端点在一个并查集当中
- 考虑怎么修改 。把所有 p [ i ] ≠ i p[i]\ne i p[i]=i 的点拎出来,令 i → i − 1 i\to i-1 i→i−1 。
- 可以 set 维护。
- 怎么判断一个操作可做了呢,用启发式合并 。
- 具体可能要用队列模拟一下 。
- 因为合并的复杂度和插入的复杂度是独立的,所以总时间复杂度 O ( n log n ) O(n\log n) O(nlogn) 。
做法是伪的,除非有可撤销的并查集- 记 c i = ∑ i = 1 n ( a i − b i ) c_i=\sum_{i=1}^n(a_i-b_i) ci=∑i=1n(ai−bi)
- 操作 [ l , r ] [l,r] [l,r] 合法当且仅当 c r = c l − 1 c_r=c_{l-1} cr=cl−1 ,然后区间 [ l , r ] [l,r] [l,r] 全部赋成 c l − 1 c_{l-1} cl−1
- 目标是让 c c c 数组清零
- 观察到
题解的做法是当 c l − 1 = c r ≠ 0 c_{l-1}=c_r\ne 0 cl−1=cr=0 时,一定不优 - 证明不难。考虑最后一次 c l − 1 = c r ≠ 0 c_{l-1}=c_r\ne 0 cl−1=cr=0 的情况,在这之后一定操作的都是两段为 0 0 0 的端点,显然这次操作是冗余的
- 初始将 c i = 0 c_i=0 ci=0 的点 rua 进队列,时间复杂度 O ( n log n ) O(n\log n) O(nlogn)
- 这个转化太妙了,给出题人点赞 !
Diverse Segments
- 假设我们知道了删除区间 [ l , r ] [l,r] [l,r]
- 把 [ l , r ] [l,r] [l,r] 抹去,考虑不同的值 a i a_i ai ,设集合 { p i } \{p_i\} {pi} 并构造若干区间 [ p i , p i + 1 ] [p_i,p_{i+1}] [pi,pi+1]
- 这样对于每个询问区间 [ l , r ] [l,r] [l,r] 只要包含任意上述构造区间就不合法
- 对于构造的每个区间 [ p i , p i + 1 ] [p_i,p_{i+1}] [pi,pi+1] 可以求出有多少个询问区间包含它
- 可以用主席树维护
- 使用 two-pointers 能做到 O ( n log n ) O(n\log n) O(nlogn)
Closest Pair
- 讲个笑话,
我连一组询问都不会做 - 这题是假询问
- 记 L [ i ] L[i] L[i] 表示 i i i 左边满足 w [ j ] ≤ w [ i ] w[j]\leq w[i] w[j]≤w[i] 的最大的点, R [ i ] R[i] R[i] 表示 i i i 右边满足 w [ j ] ≤ w [ i ] w[j]\leq w[i] w[j]≤w[i] 的最小的点
- 结论是
题解的做法是最终答案的形式一定是 ( L [ i ] , i ) , ( i , R [ i ] ) (L[i],i),(i,R[i]) (L[i],i),(i,R[i]) - 证明是不难的
虽然晚自习梦游但还是证出来了 - 我来浅证一下(
- 假设存在 ( i , j ) (i,j) (i,j) 最优,满足 L [ j ] ≠ i , R [ i ] ≠ j L[j]\ne i,R[i]\ne j L[j]=i,R[i]=j
- 若 w [ i ] ≤ w [ j ] w[i]\le w[j] w[i]≤w[j]
- 在数轴上 i < L [ j ] < j i<L[j]<j i<L[j]<j
- 因为 i i i 比 L [ j ] L[j] L[j] 优,所以 w [ i ] ≤ w [ L [ j ] ] ≤ w [ j ] w[i]\le w[L[j]]\le w[j] w[i]≤w[L[j]]≤w[j]
- 所以 ( i , L [ j ] ) (i,L[j]) (i,L[j]) 比 ( i , j ) (i,j) (i,j) 优
- 若 w [ i ] > w [ j ] w[i]>w[j] w[i]>w[j]
- 在数轴上 i < R [ i ] < j i<R[i]<j i<R[i]<j
- 因为 j j j 比 R [ i ] R[i] R[i] 优,所以 w [ i ] ≥ w [ R [ i ] ] ≥ w [ j ] w[i]\ge w[R[i]]\ge w[j] w[i]≥w[R[i]]≥w[j]
- 所以 ( R [ i ] , j ) (R[i],j) (R[i],j) 比 ( i , j ) (i,j) (i,j) 优
- 实在想不出来 motivation 了
- 毋宁称之为构造题吧
- 然后树状数组
O
(
n
log
n
)
O(n\log n)
O(nlogn) 直接 rua 过去
这个多组询问就是逊啊 - 代码写不写都无所谓
反正没事就写吧
Tokitsukaze and Beautiful Subsegments
- cf 评分 2900
好好的数据结构为什么要套数学- 显然问题可以转化成 n ln n n\ln n nlnn 个权值为 1 1 1 的矩阵
- 并且矩阵之间没有重复
- 询问也可以转化为求矩阵的和
- 直接树套树两个 log \log log 吧太行
- 考虑离线下来,跑扫描线,用线段树维护
- 时间复杂度 O ( q log n ) O(q\log n) O(qlogn)
Perfect Matching
- 先颓一会再说
欧拉回路和图的连通性
简单 dp
线段树
*数据结构
__EOF__

本文作者:仰望星空的蚂蚁
本文链接:https://www.cnblogs.com/cqbzly/p/17530130.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/cqbzly/p/17530130.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」