CF *3000 数据结构题

news/2025/10/19 14:52:24/文章来源:https://www.cnblogs.com/UKE-Automation/p/19150852

CF *3000 数据结构题

A CF464E The Classic Problem

\(\text{Link}\)

  • 题如其名,经典套路。

这种非传统最短路题我们可以考虑模拟 Dijkstra,实际上本题就是使用 Dijkstra,问题在于如何存储以及比较两个边权的大小。观察到边权是在二进制下存储的,且每一条边只有一位是 \(1\)。所以我们在二进制下修改边权时每次不会修改太多,具体的,找到 \(x_i\) 右侧第一个 \(0\),将这个 \(0\) 改为 \(1\),然后将这一段的 \(1\) 全部改成 \(0\) 即可。

那么操作实际上就是单点赋值,区间覆盖,线段树可以直接维护。而同时我们还需要保留原有的信息,所以考虑利用主席树存储边权信息。最后考虑怎样判断大小,这也是经典问题,在主席树上维护区间哈希值,二分找到第一个不同的位比较大小即可。

上述操作显然可以在 \(O(\log n)\) 的时间内完成,加上 Dijkstra 的复杂度,总复杂度 \(O(n\log^2 n)\)

B CF526F Pudding Monsters

\(\text{Link}\)

  • 经典套路。

我们记录每一行上的怪物出现在第几列,设为 \(a_i\)。那么一个区间合法的条件就是 \(\max -\min =r-l\),移项后就是 \((\max -\min)-(r-l)=0\),显然左边式子最小值就是 \(0\),维护最小值个数即可。复杂度 \(O(n\log n)\)

C CF603E Pastoral Oddities

\(\text{Link}\)

  • 之前在线段树分治的题单里,比较经典的题目。

先考虑什么样的图是合法的,可以发现:当且仅当所有联通块大小为偶数的时候才有解。那么我们可以得到一个整体的做法:先对所有边从小到大排序,然后不断加入边直到满足条件,最后一个加入的边就是答案。

回到原题,发现我们每一条边在答案中存在的时间构成了一个区间,于是考虑线段树分治。我们从右向左求解答案,递归到一个子节点时,如果当前的答案不合法,那么不断加入边权更大的边,此时我们就知道这些边的存活时间终点是当前点,将这些边加入线段树。否则的话不作处理。

判断的部分用可撤销并查集维护即可,复杂度 \(O(n\log^2 n)\)

D CF1446D2 Frequency Problem (Hard Version)

\(\text{Link}\)

  • 神秘结论题,好像是很常见的套路。

首先有一个结论:答案区间中的一个众数必定是全局众数。证明考虑反证,如果答案区间的两个众数 \(a,b\) 没有全局众数 \(c\),考虑扩展区间。此时我们有 \(cnt_a>cnt_c\),而当我们扩展到全局时会有 \(cnt_a\le cnt_c\),由于变化是连续的,所以中间一定存在一个时刻满足 \(cnt_a=cnt_c\),此时取这个区间是更优的。

然后考虑枚举另一个众数,暴力做的话可以利用前缀和做到 \(O(nV)\),可以通过简单版。不过我们知道在序列中有一个关系是出现次数为 \(i\) 的数的个数乘上 \(i\) 小于等于 \(n\),那么我们可以考虑根号分治。

  • 对于 \(cnt_i\ge \sqrt n\) 的数,这种数最多有 \(\sqrt n\) 个,直接套用上面的暴力,复杂度 \(O(n\sqrt n)\)
  • 对于 \(cnt_i< \sqrt n\) 的数,我们枚举出现次数,然后利用双指针和桶求出区间众数出现次数为 \(i\) 的最长区间即可。复杂度 \(O(n\sqrt n)\)

综上,总复杂度 \(O(n\sqrt n)\)

E CF150E Freezing with Style

\(\text{Link}\)

  • 写假了调了一个小时。

考虑我们要求的是中位数,经典套路是二分答案然后转化为 \(\pm 1\) 序列,判断是否有一个路径和 \(\ge 0\)

树上路径问题自然考虑点分治,我们考虑怎样合并两个子树。我们枚举一个子树中的深度 \(x\),那么另一边的深度必须在 \([L-x,R-x]\) 之间,很显然这个区间的长度固定,可以单调队列求解出最大值,然后相加判断是否 \(\ge 0\) 即可。

不过对于点分治暴力合并的复杂度是 \(O(n^2)\) 的,一种解决办法是先按子树大小排序再处理。不过这样太麻烦,考虑到我们可以简单实现的是两个子树的合并,所以不妨考虑边分治,这样每次只用合并两个子树。复杂度 \(O(n\log^2 n)\)

F CF997E Good Subsegments

\(\text{Link}\)

  • B 题加强版。

和 B 题思路一致,依然维护最小值,但是现在我们要求的是区间中有多少子区间满足条件。离线扫描线,在每个右端点处给左侧的最小值的地方加一,然后查询区间和即可。复杂度 \(O(n\log n)\)

G CF319E Ping-Pong

\(\text{Link}\)

  • 有难度的线段树优化建图题目。

首先考虑连边,发现我们可以分为三类:

  • 区间无交,不连边。
  • 区间包含,被包含区间向包含区间连单向边。
  • 区间相交,连双向边。

而我们要求判断的是能否从 \(a\) 走到 \(b\)。乍一看这十分不可做,因为这是有向图动态可达性。不妨先考虑简单情况,即没有单向连边的情况。此时我们可以将所有相交的区间直接用并查集连起来,然后只需要判断 \(a,b\) 在不在一个连通块即可。可以发现,每一个连通块都会覆盖满一个区间,记为 \([L,R]\)

对于原题的情况,我们依然如此,但是不同的地方在于我们连通块对应的区间可能会有包含。我们知道我们可以从被包含的区间走向包含的区间,所以可以得到 \(a\) 可达 \(b\) 的充要条件:\(a\) 所在连通块的区间被 \(b\) 所在连通块的区间完全包含。

那么我们在线段树上维护一下所有区间,每次找出 \(l,r\) 和哪些区间有交,合并起来即可。由于保证后面的区间长度比前面大,所以后面的区间不会被前面的包含,因此直接找就是正确的,复杂度 \(O(n\log n)\)

H CF696E ...Wait for it...

\(\text{Link}\)

  • 树剖模板题,要把题先读懂。

删除权值前 \(k\) 小的点并输出好像不是很好做,不过我们可以转化一下。我们做 \(k\) 次求最小值操作,求出来时候再删掉即可。每个点做多删掉一次,所以复杂度是对的。

但是每个点上会有很多人,用 set 维护该点上的人,删除后从 set 中再取一个即可。复杂度 \(O(n\log^2 n)\)

I CF1163F Indecisive Taxi Fee

\(\text{Link}\)

  • 线段树在图论上的应用,需要对最短路的理解。

首先先随意找出一条 \(1\to n\) 的最短路,然后我们分类讨论一下这条边在不在这条最短路上。我们此时的最短路有两种可能,经过或不经过这条边。

  • 如果不在最短路上。此时不经过这条边的最短路就是已经求出来的那一条。否则我们从 \(1,n\) 分别跑一边最短路求出到所有点的距离,然后经过这条边的最短路就是 \(\min(dis_{1,u}+w+dis_{n,v},dis_{1,v}+w+dis_{n,u})\)

  • 如果在最短路上。此时经过这条边的最短路还是刚刚的式子。而最困难的是不经过这条边的最短路怎么求。我们考虑从经过的其他边下手,假如我们的路径形如 \(1\to u\to v\to n\),很显然在这里面我们会经过一些最短路上的边。

    \(l_u\) 表示从 \(1\to u\) 的最短路上至少要经过几条原最短路上的边, \(r_v\) 同理。那么上面的这条最短路没有经过 \([l_u+1,r_v]\) 上的任何一条边,我们可以将它的答案更新到这个区间上。那么我们维护一下区间取 \(\min\)、单点查询即可。复杂度 \(O(n\log n)\)

J CF436F Banners

\(\text{Link}\)

  • KTT 模板题。

首先我们枚举 \(c\),那么此时 \(b_i\ge c\) 的贡献我们就已知了。现在我们要确定一个 \(p\),使得 \(p\times \sum[b_i<c \land a_i\ge p]\) 的值最大。这个式子显然是一个 \(kx\) 的形式,并且在我们扫描线的时候我们会给一段前缀的 \(p\)\(x\) 加一。

那么这个就可以用 KTT 维护了,复杂度 \(O(n\log^2 n)\) 直接过。

K CF793F Julia the snail

\(\text{Link}\)

  • 吉司机线段树的应用。

考虑将把他放平变成一个序列,那么在序列上的这种问题我们可以考虑离线扫描线。枚举上界 \(r\),维护每个左端点能走到的最远点。

接下来考虑怎样更新,假如我们当前走到 \(r\),其对应左端点为 \(l\),考虑答案会怎样变化。很显然,此时所有起点位于 \([1,l]\),并且能够走到的最远点 \(\ge l\) 的点都可以往回走然后跳到 \(r\)。所以我们的操作是将一段区间 \(\ge l\) 的所有数改为 \(r\)

这个操作看上去不好做,但实际上它和 chkmin 是本质相同的。用吉司机线段树维护一下即可,复杂度 \(O(n\log n)\)

L CF1178G The Awesomest Vertex

\(\text{Link}\)

  • 经典拆绝对值算贡献。

容易发现后面的 \(|\sum b|\) 是不变的,所以我们只需要考虑前面的部分。那么我们维护的实际上就是一个 \(kx\) 的状物,拍到 DFS 序上就是区间加区间查。但是现在的问题是我们的 \(x\) 是带绝对值的,不好维护,考虑经典套路,我们知道:

\[k|x|=\max(kx,-kx) \]

所以我们对每个节点维护两个值 \(kx\)\(-kx\),每次给 \(x\) 加上一个正值,最后求最大值。KTT 即可,复杂度 \(O(n\log^2 n)\)

M CF773E Blog Post Rating

\(\text{Link}\)

  • 手玩找出操作的本质即可用数据结构维护。

容易发现我们一定将 \(a_i\) 排成升序最优,并且我们的 \(f\) 值会先一直递减,随后递增。先找到这个转折点,然后考虑 \(f\) 值随后如何变化。容易发现在经过第 \(i\) 个博客之后的 \(f\)\(f_i\) 有递推式 \(f_i=\min(f_{i-1}+1,a_i)\)。根据经典套路我们知道这等于 \(\min a_i+n-i\)

那么我们现在要找出转折点,也就是找出第一个 \(-i\le a_i\) 的位置,转化一下就是 \(a_i+i\ge 0\)。用线段树维护当前所有的 \(a_i\),用线段树二分即可。\(a_i+n-i\) 的最小值显然也可以直接维护。复杂度 \(O(n\log n)\)

N CF331D3 Escaping on Beaveractor

\(\text{Link}\)

  • 倍增维护走路,但是代码细节很多。

容易发现我们的操作次数很多,肯定无法枚举。考虑这是一个走路题,我们用倍增来维护。记 \(f_{i,j}\) 表示从第 \(i\) 个点出发走 \(2^j\) 条线段到达哪一条线段,\(g_{i,j}\) 表示从第 \(i\) 个点出发走 \(2^j\) 条线段到达终点后需要多长时间。现在需要考虑 \(f_{i,0},g_{i,0}\) 怎么求,我们从四个方向上各做一次扫描线,用线段树维护当前位置上的线段编号即可。

求答案的时候用倍增数组走即可,最后不够的要强制退回来。复杂度 \(O(n\log n)\),代码比较困难。

O CF185E Soap Time! - 2

\(\text{Link}\)

先考虑二分答案。考虑到每个人会有一个离他最近的车站,把这个距离记作 \(d_i\)。那么很显然,走到车站的一定是一个按 \(d_i\) 排序后的前缀,这样不会更劣。我们枚举这些人,那么剩下的人自然不能走到车站,我们先对他们能走到的范围求交,记作 \(A\)

然后走到车站的这些人需要走到这个交 \(A\) 里面,此时每个车站能往外走的距离是 \(mid-\max d\),不过枚举每个车站判断与 \(A\) 是否有交复杂度不能接受,考虑让这个过程反过来,我们看哪个范围里的车站能够走到 \(A\) 里面。不难发现这就是将 \(A\) 向外扩大 \(mid-\max d\) 后的区域。我们查询这个区域里是否有车站即可。

不过此时的区域难以表示,原因在于在曼哈顿坐标系下我们的区域是一个菱形。考虑转化成切比雪夫坐标系,这样上述所有区域都是矩形,用主席树即可查询。复杂度 \(O(n\log^2 n)\)

最后一个问题是 \(d_i\) 怎么求,我们依然二分答案,然后看这个范围内是否有车站即可。复杂度还是两只老哥的。

P CF1218B Guarding warehouses

\(\text{Link}\)

  • 神秘计算几何。

先考虑在普通坐标系上的问题,我们求光线从 \(x\) 轴射出的答案。我们在 \(x\) 轴上从左往右扫描线,每一次我们求出当前区间内最下面的两条线段,用两个梯形面积做差即可。

然后考虑放到极坐标系上,我们在极角上扫描线,用 set 维护当前离原点最近的两条线段,求两个三角形的面积差即可。复杂度 \(O(n\log n)\),常数比较大,并且精度要控制好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/940346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年钢材厂家推荐排行榜,方钢/扁钢/圆钢/光轴/六角钢/异型钢/冷拉冷拔钢材/热轧钢材,Q355B/Q345B/16Mn/45#/40Cr/A3/Q235B钢公司精选

2025年钢材厂家推荐排行榜:方钢/扁钢/圆钢/光轴/六角钢/异型钢/冷拉冷拔钢材/热轧钢材,Q355B/Q345B/16Mn/45#/40Cr/A3/Q235B钢公司精选随着工业技术的不断发展和市场需求的多样化,钢材作为基础材料在各个行业中发挥…

[Linux] Linux下的域名解析过程(本机hosts和DNS服务器)

[Linux] Linux下的域名解析过程(本机hosts和DNS服务器)$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");目录01 介绍01 问路策略02 查询hosts03 查询DNS服务…

2025定型机厂家推荐:鑫源恒进节能高效,智能排风引领行业新趋势!

2025定型机厂家推荐:鑫源恒进节能高效,智能排风引领行业新趋势!随着纺织印染行业的快速发展,定型机作为关键设备之一,在提升产品质量和生产效率方面发挥着重要作用。当前,定型机、拉幅定型机/拉幅、门富士定型机…

Emacs自定义插件进行笔记本地备份和RClone远程同步(KIMI)

Emacs自定义插件进行笔记本地备份和RClone远程同步(KIMI)为了能够在Emacs记笔记的时候能够同步和备份笔记,我用如下Emacs自定义插件实现这个功能。备份功能将笔记备份到本地指定目录的压缩包,同步功能将笔记和远程…

LLM分词器

BERT基座模型

ubuntu 24.04虚拟机安装vgpu显卡驱动

# 安装依赖 sudo apt install build-essential linux-headers-generic libglvnd-dev pkg-config -y # 安装dkms sudo apt install dkms -y # 开启32位兼容库 sudo dpkg --add-architecture i386 sudo apt update # 安装…

CF1859F Teleportation in Byteland

树链剖分维护贡献发现最优策略一定是在一个位置训练,之后就直接到目标点,那么我们可以枚举训练次数,之后就可以转了。那么也就是说我们希望找到一个 \(u,v\) 路径上的点 \(s\),那么我们之后一定是从 \(s\) 出发,找…

密钥自己生成的方法

两人一组,在Ubuntu或openEuler中(推荐openEuler)中使用OpenSSL编程实现带签名的数字信封协议。使用OpenSSL库时,Alice发送,Bob接收。Ailice,Bob在实验中要替换为自己的8位学号+姓名。使用Markdown记录详细记录实…

2025机床维修厂家推荐:永华鑫数控设备,专业服务保障生产!

2025机床维修厂家推荐:永华鑫数控设备,专业服务保障生产!随着工业4.0的推进和智能制造的快速发展,机床作为制造业的核心设备,其稳定性和可靠性直接影响着企业的生产效率和产品质量。然而,由于长期高负荷运转及环…

逆向分析CoreText中的字体级联/Font Fallback机制

逆向分析CoreText中的字体级联/Font Fallback机制完整内容也可以在公众号「非专业程序员Ping」查看 一、引言本文基于Xcode 16.4,iOS 18.5模拟器分析,不同系统版本可能有区别。前面我们介绍了自定义文字排版引擎的原…

2025棋牌室加盟推荐麻友社,自主自助模式引领行业新风尚!

2025棋牌室加盟推荐麻友社,自主自助模式引领行业新风尚!当前棋牌室加盟领域的技术挑战随着科技的不断进步和消费者需求的多样化,棋牌室加盟领域面临着诸多技术挑战。传统的棋牌室经营模式已经难以满足现代消费者的需…

计算机硬件-网络

网卡 网卡如下 :想起网卡就想起了零拷贝 , 软件开发中常常遇到 ,例如 MQ 中 ,例如 Nginx 中 . 首先,什么是“零拷贝”? “零拷贝”的目标,顾名思义,就是尽量减少甚至完全避免数据在内存中的不必要的复制次数。 在传…

2025TYPE-C母座优质厂家推荐,创粤科技TID认证高速传输首选!

2025 TYPE-C母座优质厂家推荐,创粤科技TID认证高速传输首选!当前TYPE-C母座技术挑战随着电子设备的不断发展,TYPE-C母座作为连接器的重要组成部分,其需求量和性能要求也在不断提高。当前,TYPE-C母座面临诸多技术挑…

2025年医药冷链运输厂家推荐排行榜,药品/临床样本/CAR-T/蛋白/诊断试剂/生物/血液/细胞/芯片运输,冷藏车/冷藏箱/保温箱/干冰/液氮/温控/国际冷链公司推荐!

2025年医药冷链运输厂家推荐排行榜:药品/临床样本/CAR-T/蛋白/诊断试剂/生物/血液/细胞/芯片运输,冷藏车/冷藏箱/保温箱/干冰/液氮/温控/国际冷链公司推荐随着全球生物医药行业的快速发展,医药冷链运输的需求日益增…

Ubuntu 桌面美化

1.主题安装 1.1.更新 sudo apt update1.2.安装tweak sudo apt install gnome-tweaks1.3.安装firefox插件1.4.安装gnome-shell sudo apt install chrome-gnome-shell -y1.5.安装扩展管理器 sudo apt install gnome-shel…

题解:CF1336E2 Chiori and Doll Picking (hard version)

很牛很牛很牛的题。 题意:给出 \(n\) 个数 \(a_i\),保证 \(a_i<2^m\),问对于 \(i\in[0,m]\),从这 \(n\) 个数取出若干个异或值的 \(1\) 的个数为 \(i\) 的方案数。\(n\le 2\times 10^5,m\le 53\)。 做法: 首先…

MantisBT vs Kanass,开源项目管理工具一文全面对比分析 - 详解

MantisBT vs Kanass,开源项目管理工具一文全面对比分析 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Co…

2025工作服厂家推荐:深圳市贵格服饰,专业定制各类高品质工作服!

2025工作服厂家推荐:深圳市贵格服饰,专业定制各类高品质工作服!随着社会的发展和科技的进步,各行各业对工作服的需求越来越高。无论是防静电工作服、劳保工作服,还是国网工作服、餐厅工作服等,都面临着新的技术挑…

flutter 环境搭建

flutter 环境搭建2025-10-19 14:11 qgbo 阅读(0) 评论(0) 收藏 举报1. 先安装 flutter, 湿这个命令可以用。设置 FLUTTER_HOMEexport FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn &&export …

Apollo自动驾驶平台:开源、高性能的自动驾驶解决方案

Apollo是百度推出的开源自动驾驶平台,提供高性能、灵活的架构,加速自动驾驶车辆的开发、测试和部署。支持多种硬件架构,包含完整的模块化解决方案和丰富的开发工具。Apollo自动驾驶平台 Apollo 是百度推出的开源自动…