news 2026/4/3 3:33:42

UVa 12663 High Bridge Low Bridge

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UVa 12663 High Bridge Low Bridge

题目描述

河上有nnn座桥,每座桥有一个高度hih_ihi。河水会泛滥mmm次,每次洪水会将水位从上次洪水结束后的高度bi−1b_{i-1}bi1上升到aia_iai,然后回落到bib_ibi。初始水位为111

题目规定:如果一座桥在洪水结束后仍然在水下(即水位不低于桥的高度),那么下次洪水时它不会被视为再次被淹。也就是说,每次洪水只记录上升阶段(水位从bi−1b_{i-1}bi1上升到aia_iai期间)被淹的桥。

给定nnn座桥的高度和mmm次洪水的数据,求有多少座桥至少被淹了kkk次。

输入格式

输入最多包含252525个测试用例。每个测试用例的第一行包含三个整数n,m,kn, m, kn,m,k1≤n,m,k≤1051 \leq n, m, k \leq 10^51n,m,k105)。第二行包含nnn个整数hih_ihi,表示每座桥的高度(2≤hi≤1082 \leq h_i \leq 10^82hi108)。接下来的mmm行每行包含两个整数aia_iaibib_ibi1≤bi<ai≤108,ai>bi−11 \leq b_i < a_i \leq 10^8, a_i > b_{i-1}1bi<ai108,ai>bi1)。整个输入的文件大小不超过5MB5\text{MB}5MB

输出格式

对于每个测试用例,输出至少被淹了kkk次的桥的数量。

题目分析

核心逻辑

对于第iii次洪水:

  • 洪水开始前的水位是bi−1b_{i-1}bi1(第一次洪水前b0=1b_0 = 1b0=1
  • 水位上升到aia_iai
  • 然后回落到bib_ibi

桥被淹的条件:在上升阶段,水位超过了桥的高度,即bi−1<h≤aib_{i-1} < h \leq a_ibi1<hai
为什么不是bib_ibi因为下降阶段不影响本次是否被淹的记录,只影响下次洪水是否算作“再次被淹”。

关键点

  1. 只考虑上升阶段:题目描述中的文字游戏关键就在于,下降阶段不影响计数,只影响下次判断。
  2. 区间更新:对于每次洪水,需要给所有高度在(bi−1,ai](b_{i-1}, a_i](bi1,ai]范围内的桥的计数+1+1+1
  3. 高效处理:直接遍历每座桥更新会超时(O(nm)O(nm)O(nm)),需要使用差分技巧。

算法步骤

  1. 将桥的高度排序,以便二分查找。
  2. 使用差分数组记录每座桥被淹的次数。
  3. 遍历每次洪水:
    • 用二分查找找到高度>bi−1> b_{i-1}>bi1的第一个桥的索引leftleftleft
    • 用二分查找找到高度≤ai\leq a_iai的最后一个桥的索引rightrightright
    • 如果left≤rightleft \leq rightleftright,则在差分数组中标记区间[left,right][left, right][left,right]111
  4. 通过差分数组前缀和计算每座桥的实际被淹次数。
  5. 统计次数≥k\geq kk的桥的数量。

时间复杂度

  • 排序桥高度:O(nlog⁡n)O(n \log n)O(nlogn)
  • 每次洪水二分查找:O(log⁡n)O(\log n)O(logn),总O(mlog⁡n)O(m \log n)O(mlogn)
  • 前缀和统计:O(n)O(n)O(n)
  • 总复杂度:O((n+m)log⁡n)O((n+m) \log n)O((n+m)logn),可以处理10510^5105的数据规模。

空间复杂度

  • 存储桥高度和差分数组:O(n)O(n)O(n)

代码实现

// High Bridge Low Bridge// UVa ID: 12663// Verdict: Accepted// Submission Date: 2025-12-23// UVa Run Time: 0.040s//// 版权所有(C)2025,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;constintMAXN=100010;intmain(){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);intcaseNo=1;intn,m,k;intbridgeHeight[MAXN],diff[MAXN];inta,b;while(cin>>n>>m>>k){for(inti=0;i<n;i++){cin>>bridgeHeight[i];diff[i]=0;}sort(bridgeHeight,bridgeHeight+n);intlastWaterLevel=1;// 初始水位为1,也是第一次洪水前的b₀for(inti=0;i<m;i++){cin>>a>>b;// 本次洪水影响:高度在 (lastWaterLevel, a] 范围内的桥// 使用 upper_bound 找到第一个 > lastWaterLevel 的桥// 使用 upper_bound 找到第一个 > a 的桥,然后-1得到最后一个 ≤ a 的桥intleft=upper_bound(bridgeHeight,bridgeHeight+n,lastWaterLevel)-bridgeHeight;intright=upper_bound(bridgeHeight,bridgeHeight+n,a)-bridgeHeight-1;if(left<=right){diff[left]++;diff[right+1]--;}lastWaterLevel=b;// 更新为本次洪水结束后的水位}// 计算每座桥被淹的次数intcurrentFloodCount=0;intanswer=0;for(inti=0;i<n;i++){currentFloodCount+=diff[i];if(currentFloodCount>=k)answer++;}cout<<"Case "<<caseNo++<<": "<<answer<<'\n';}return0;}

样例解释

样例111

输入: 2 2 2 2 5 6 2 8 3
  • 桥高度:2,52, 52,5
  • 111次洪水:影响(1,6](1, 6](1,6]→ 桥2,52, 52,5+1+1+1
  • 222次洪水:影响(2,8](2, 8](2,8]→ 桥555+1+1+1(桥222高度为222,不在(2,8](2,8](2,8]区间)
  • 统计:桥222被淹111次,桥555被淹222
  • 输出:111(只有桥555被淹≥2\geq 22次)

样例222

输入: 5 3 2 2 3 4 5 6 5 3 4 2 5 2
  • 桥高度:2,3,4,5,62, 3, 4, 5, 62,3,4,5,6
  • 111次洪水:影响(1,5](1, 5](1,5]→ 桥2,3,4,52,3,4,52,3,4,5+1+1+1
  • 222次洪水:影响(3,4](3, 4](3,4]→ 桥444+1+1+1
  • 333次洪水:影响(2,5](2, 5](2,5]→ 桥3,4,53,4,53,4,5+1+1+1
  • 统计:桥2:12:12:1次,桥3:23:23:2次,桥4:34:34:3次,桥5:25:25:2次,桥6:06:06:0
  • 输出:333(桥3,4,53,4,53,4,5被淹≥2\geq 22次)

总结

本题的关键在于理解题目描述中的文字游戏:每次洪水只记录上升阶段被淹的桥,下降阶段只影响下次是否算作“再次被淹”
通过将桥高度排序并使用差分技巧,可以高效地处理区间更新问题。
注意数据范围较大,需要使用O((n+m)log⁡n)O((n+m) \log n)O((n+m)logn)的算法才能通过。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/29 4:23:21

Swift携手全球30多家银行打造区块链账本,传统金融与Web3融合再提速

12月19日&#xff0c;全球金融报文服务巨头Swift正式宣布&#xff0c;正在与全球超过30家主流银行展开深度合作&#xff0c;共同推进基于区块链技术的全新账本系统设计。这一消息不仅是Swift在数字化转型道路上的重要里程碑&#xff0c;更是全球金融基础设施拥抱区块链技术、迈…

作者头像 李华
网站建设 2026/3/30 18:12:14

量子优越性为什么采用玻色采样问题,而不采用N皇后问题呢?

这是一个非常深刻且关键的问题&#xff01;量子优越性&#xff08;Quantum Supremacy&#xff09;之所以选择玻色采样&#xff08;Boson Sampling&#xff09;&#xff0c;而不是像N皇后问题这样的经典组合优化问题&#xff0c;背后有清晰的理论、复杂性和物理实现逻辑。下面我…

作者头像 李华
网站建设 2026/4/1 1:41:20

工业可视化监控利器:Prosys OPC UA Monitor 产品详细介绍

只要真正做过 OPC UA 项目&#xff0c;基本都会遇到一个阶段&#xff1a;系统已经能连上了&#xff0c;数据也能读到&#xff0c;但你心里始终没底。 网络是不是偶尔抖一下&#xff1f;变量值有没有在悄悄丢&#xff1f;订阅断了系统会不会毫无察觉&#xff1f;安全策略看起来…

作者头像 李华
网站建设 2026/3/31 21:14:21

Windows系统文件msnetobj.dll丢失找不到问题 下载修复

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/4/1 11:06:47

如何通过 C# 将 Markdown 转换为 PDF 文档

在日常开发中&#xff0c;我们经常需要将轻量级的 Markdown 文档转换为格式固定、便于分享的 PDF 文件。本文将详细介绍如何使用 Spire.Doc for .NET 库&#xff0c;通过 C# 代码实现 Markdown 到 PDF 的高效转换&#xff0c;并涵盖核心步骤、进阶示例。一、快速环境准备 Spire…

作者头像 李华