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

AC鸭的温度墙

题目描述

AC鸭在实验室里看到了一面很长的温度墙,这面墙从左到右一共有 n 个位置。

一开始,每个位置的温度都是 0。

接下来 AC鸭会进行 m 次加热操作。每次操作给出 l,r,v表示把第l个位置到第r个位置的温度都加上上v。

所有操作结束后,AC鸭想知道有多少个位置的温度不小于 k。

输入格式

第一行三个整数 n,m,k表示温度墙长度、操作次数和目标温度。

接下来 m 行,每行三个整数 l,r,v表示一次加热操作。

输出格式

输出一个整数,表示最终温度不小于 k 的位置数量。

样例

输入数据 1

5 2 3 1 3 2 2 5 1

输出数据 1

2

样例解释

两次操作后,温度分别为2 3 3 1 1,其中第 2,3个位置不小于 3。

数据规模

对于 20% 的数据,1≤n,m≤2000。

对于 50% 的数据,1≤n≤25000,1≤m≤25000。

题解

问题分析

给定一个长度为n的数组,初始所有元素为0。进行m次区间加法操作,每次将区间[l, r]内的元素加上v。最后统计数组中不小于k的元素个数。

方法思路

直接模拟每次操作对区间内的元素逐个加v,时间复杂度为O(m*n),对于n和m达到1e6的情况会超时。需要使用更高效的算法。

差分数组:差分数组能在O(1)时间内完成区间加法操作,最后通过差分数组恢复原数组时只需O(n)时间。

  1. 差分数组初始化:创建一个大小为n+2的差分数组diff,初始化为0。
  2. 区间加法操作:对于每次操作(l, r, v),执行diff[l] += v和diff[r+1] -= v。
  3. 恢复原数组并统计:遍历差分数组,计算当前前缀和即为原数组的值,统计其中不小于k的个数。

解决代码

#include <iostream> #include <vector> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m, k; cin >> n >> m >> k; vector<int> diff(n + 2, 0); // 差分数组,多开两个空间避免越界 for (int i = 0; i < m; ++i) { int l, r, v; cin >> l >> r >> v; diff[l] += v; if (r + 1 <= n) { diff[r + 1] -= v; } } int current = 0; int count = 0; for (int i = 1; i <= n; ++i) { current += diff[i]; if (current >= k) { ++count; } } cout << count << endl; return 0; }

代码解释

  1. 输入处理:使用快速输入方法提高效率,读取温度墙长度n、操作次数m和目标温度k。
  2. 差分数组操作:对于每个区间加法操作(l, r, v),在差分数组的l位置加v,在r+1位置减v,标记区间变化。
  3. 恢复原数组并统计:通过差分数组计算前缀和得到每个位置的温度值,同时统计不小于k的温度值个数。
  4. 输出结果:输出满足条件的温度值个数。

这种方法利用差分数组将区间加法操作的时间复杂度从O(n)降到O(1),整体复杂度为O(n + m),适用于大规模数据。

对于 100% 的数据,1≤n,m≤1000000,1≤l≤r≤n,1≤k,v≤109。

http://www.jsqmd.com/news/797679/

相关文章:

  • 别再只盯着CRC了!聊聊Modbus ASCII模式里的LRC校验,附C语言实现与调试技巧
  • 车载互联十年反思:从76%安全担忧看智能座舱设计的人因工程挑战
  • 中文大语言模型资源导航:Awesome-Chinese-LLM项目全解析
  • vim翻页命令用法详解
  • 保姆级教程:用EEGLAB搞定脑电数据预处理,从导入到ICA去伪迹全流程避坑
  • nlux框架:快速构建可定制AI对话界面的JavaScript解决方案
  • 2026年5月正规珠海旅行社最新靠谱纯玩线路推荐:珠海香港澳门一/二日经典地标游!附珠港澳旅游核心FAQ(15问必答) - 奋斗者888
  • 告别USB复合设备驱动混乱:手把手教你用IAD(接口关联描述符)正确管理多接口
  • FFXIV TexTools深度解析:从游戏资源编辑到个性化创作的全流程实战
  • 从零到上手:用LDAP Browser连接和管理你的OpenLDAP服务器(Windows平台实战)
  • CANN/asc-devkit FreeAllEvent API文档
  • 知网AI率80%降到15%教程,比话降AI知网算法专精+售后保障!
  • 从一次线上故障复盘:为什么你的JDK环境变量在Docker或Crontab里失效了?
  • 告别Qt Creator?手把手教你用VSCode+MinGW调试QT项目(附完整launch.json配置)
  • 告别‘Device not support’:深入STM32 USB Host状态机,搞定非标CDC设备CH340
  • AC鸭的训练分组
  • 5步掌握Betaflight 2025升级:从配置到飞行的完整解决方案
  • 从‘结势垒’到‘混合PIN’:手把手带你用TCAD仿真复现JBS/MPS的性能差异
  • 降AI提示词大全!10个prompt让AI输出人类味+嘎嘎降AI兜底!
  • AD9361射频收发器:高效频点切换与状态机管理的实战解析
  • 3步快速绕过iOS 15-16激活锁:Applera1n终极免费解决方案
  • Upsonic AI智能体框架:生产级安全、多模态与可观测性实战指南
  • Python 爬虫进阶技巧:批量接口请求参数批量生成
  • 编程分析职场会议时长,参会人数,落地成果数据,统计无效会议占比,精简会议流程,为企业节省大量职场工作时间。
  • 告别Navicat!免费开源的Beekeeper Studio,从安装到连接MySQL/PostgreSQL保姆级教程
  • 如何在无GPU群晖设备上开启完整AI相册功能:Synology Photos面部识别终极指南
  • FoalTS 错误处理机制:构建健壮的后端应用
  • JeecgBoot 低代码 v3.9.2 发布:从“拖拉拽”到“说一句话”,开启低代码 v2.0 时代!
  • Unity-Editor-Toolbox 层级窗口增强:如何显示脚本、标签、图层等关键信息
  • 终极指南:reverse-shell多语言payload技术详解 - Python、Perl、NC、SH实现对比