当前位置: 首页 > news >正文

算法题(162):火烧赤壁

审题:

本题需要我们找到着火区域的总长度

思路:
方法一:离散化+差分

首先我们分析题意:

一段区间是左闭右开的,所以着火区域是用右端点减去左端点。为了防止区间重叠导致的重复计算,我们需要使用差分的思想来解决问题,差分数组中每当有着火区域就让他索引位置+1,让末端位置-1。还原差分后最终的值不为0就是着火区域。

其次我们观察本题的数据范围,数据量并不大,但是数据范围很大,无法用值直接充当索引,这样会导致数组空间不够,所以我们先要对数据做离散化处理,以便后续可以根据离散值当索引将数据存进数组中

总体流程:

1.离散化处理数据

2.根据离散化的值建立差分数组

3.还原差分数组,确定真实着火区间

4.累加着火区间
解题:

 

#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
const int N = 2e4 + 10;
int n;
int pos;//离散化后的数据个数
int a[N], b[N];//存储左右端点
int disc[2 * N];//离散化数据数组
unordered_map<int, int> m;//原始数据,离散值
int f[2 * N];//差分数组
int main()
{cin >> n;//离散化处理for (int i = 1; i <= n; i++){cin >> a[i] >> b[i];disc[++pos] = a[i];disc[++pos] = b[i];}sort(disc + 1, disc + 1 + pos);//排序pos = unique(disc + 1, disc + 1 + pos) - (disc + 1);//去重for (int i = 1; i <= pos; i++){int x = disc[i];m[x] = i;}//差分数据for (int i = 1; i <= n; i++){int l = a[i];int r = b[i];f[m[l]]++; f[m[r]]--;}//还原差分数组for (int i = 1; i <= pos; i++){f[i] += f[i - 1];}//统计结果int answer = 0;for (int i = 1; i <= pos; i++){int j = i;while (j < pos && f[j] > 0) j++;answer = answer + disc[j] - disc[i];i = j;}cout << answer << endl;return 0;
}

注意:
1.由于我们后面需要用到去重之后的离散化数组,所以在升序排序之后我们仍然需要对disc去重。

2.哈希表是根据实际值查找离散值,disc数组是用离散值查找实际值。

哈希表用在差分数组部分,因为要对对应离散值位置进行着火判断。

disc用于映射找回实际着火区间,累加到answer中

P1496 火烧赤壁 - 洛谷

相关文章:

  • 看板中“进行中”任务过多如何优化
  • 【数据结构】树形结构--二叉树(二)
  • 梯度下降:机器学习优化的核心算法
  • 互联网大厂Java求职面试:AI与大模型技术在企业知识库中的深度应用
  • Oracle-高频业务表的性能检查
  • 【技术笔记】AI Agent 项目 SUNA 部署:MSYS2 环境中 Python 版本从 3.12 降级至 3.11 的实操指南
  • React 第五十三节 Router中 useRouteError 的使用详解和案例分析
  • 70年使用权的IntelliJ IDEA Ultimate安装教程
  • [论文阅读] 人工智能+项目管理 | 当 PMBOK 遇见 AI:传统项目管理框架的破局之路
  • Git 安装全攻略Linux、macOS、Windows 与源码编译
  • 电子行业AI赋能软件开发经典案例——某金融软件公司
  • Authpf(OpenBSD)认证防火墙到ssh连接到SSH端口转发技术栈 与渗透网络安全的关联 (RED Team Technique )
  • 总结HTML中的文本标签
  • 智能标志桩图像监测装置如何守护地下电缆安全
  • Unity 单例模式完全指南
  • SQL Server 2025 预览版新功能
  • 大疆相关知识收集
  • 命名管道实现本地通信
  • Python环境搭建竞赛技术文章大纲
  • Mysql莫名奇妙重启
  • 怎么创作自己的网站/新闻早知道
  • 中企动力做网站/常见的网络营销策略都有哪些
  • 红岗网站建设/北京优化核酸检测
  • 大连网站优化技术/运营推广怎么做
  • 西安的软件公司哪个比较厉害/宁波正规站内优化seo
  • 青岛定制网站设计公司/seo怎样