news 2026/7/24 8:32:29

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/7/17 5:40:48

前端工程化核心面试题与详解

前端工程化核心面试题与详解 1. 前端工程化概念与理解 1.1 说说你对前端工程化的理解 标准答案&#xff1a; 前端工程化是指将系统化、规范化、可度量的方法应用于前端应用的开发、测试、维护和部署全过程&#xff0c;旨在提升开发效率、保障代码质量、增强项目可维护性并优…

作者头像 李华
网站建设 2026/7/19 14:31:56

老师傅借助国产CAD,将经验与精准高效结合

在车间&#xff0c;老师傅的价值无可替代&#xff0c;他们凭借多年的经验&#xff0c;能敏锐地察觉到图纸中可能存在的问题和加工难点。但在面对频繁且细微的设计变更时&#xff0c;仅靠经验和肉眼在密密麻麻的图纸中查找修改点&#xff0c;不仅耗时&#xff0c;也存在风险。CA…

作者头像 李华
网站建设 2026/7/18 19:43:07

基于STM32智能图像识别自主学习录入物体场景设计

摘 要 本文介绍了一种基于 STM32F103C8T6 单片机的系统设计。该系统主要由单片机核心板、TFT 液晶显示电路、可选的无线通信模块&#xff08;无线蓝牙 / 无线 WIFI / 无线视频监控模块&#xff09;、蜂鸣器声光报警、摄像头模块、舵机模块、按键电路以及电源电路组成。通过各模…

作者头像 李华
网站建设 2026/7/22 11:00:19

小功率数控直流稳压电源设计

摘 要 在现代电子设备的研发、测试和维护过程中&#xff0c;稳定、精确的直流电源是不可或缺的。传统的直流电源往往存在调节不便、精度不高、缺乏保护机制等问题&#xff0c;难以满足现代电子设备的多样化需求。因此&#xff0c;设计一款小功率数控直流稳压电源具有重要意义。…

作者头像 李华
网站建设 2026/7/23 17:53:38

基于Stm32的人脸识别门锁控制系统

2 系统总体设计 2.1 系统功能设计 人脸识别门锁控制系统主要实现录入人脸图像&#xff0c;识别人脸图像&#xff0c;并且进行开门&#xff0c;关门的实现&#xff0c;通过摄像头模块进行拍摄人脸图像&#xff0c;并且通过按键电路模块控制相关录入图像&#xff0c;关闭图像&…

作者头像 李华