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

蓝桥杯备赛-差分-推箱子

在一个高度为H的箱子前方,有一个长和高为N的障碍物。
障碍物的每一列存在一个连续的缺口,第i列的缺口从第l各单位到第h个单位(从底部由0开始数)。
现在请你清理出一条高度为H的通道,使得箱子可以直接推出去。
请输出最少需要清理的障碍物面积。
如下图为样例中的障碍物,长和高度均为5,箱子高度为2。(不需要考虑箱子会掉入某些坑中)
 

    


最少需要移除两个单位的障碍物可以造出一条高度为2的通道。

输入格式

输入第一行为两个正整数N和H,表示障碍物的尺寸和箱子的高度,1≤H≤N≤1000000。
接下来N行,每行包含两个整数li和hi,表示第i列缺口的范围,0≤li≤hi<N。

输出格式

输出一个数字表示答案。

输入样例 
5 2
2 3
1 2
2 3
1 2
2 3
输出样例 
2

 通过率90%
障碍物高度为n,前缀和数组a和差分数组大小为n+1
前缀和ai表示第i行有几个空位置
依次读取每次的缺口,在差分数组上做标记,在利用数组之间的关系,更新前缀和数组
更新完,就从最底的一行开始遍历每一行障碍物,每次遍历计算h行的非空数+(h-a[i])即可

#include<stdio.h>
#include<iostream>
#include<vector>
#include<climits>
using namespace std;
int main()
{
	long long n, h;
	cin >> n >> h;
	vector<long long> a(n + 2, 0);//前缀和数组
	vector<long long> d(n + 2, 0);//差分数组
	long long l, r;
	for (int i = 1; i <= n; i++) {
		cin >> l >> r;
		d[l + 1]++;
		d[r + 2]--;
	}
	for (int i = 1; i <= n; i++) {
		a[i] = a[i - 1] + d[i];
	}
	long long min = LLONG_MAX;
	for (int i = 1; i <= n - h + 1; i++) {
		long long count = 0;
		for (int j = 0; j < h; j++) {
			count += (n - a[i + j]);
		}
		if (count < min) {
			min = count;
		}
	}
	cout << min;
	return 0;
}

 

相关文章:

  • 虚幻基础:动画系统
  • 推荐一款好用在线免费软件工具箱-传道软件箱
  • PostgreSQL - Windows PostgreSQL 下载与安装
  • Facebook 与信息传播:塑造新闻和媒体的新生态
  • 前端计算精度保卫战:Vue3中big.js的加减乘除实战指南
  • 深度学习系列80:Pike-RAG解析
  • C#工业上位机实时信号边沿检测实现
  • 【前端】【nuxt】几种在 Nuxt 客户端使用console的方式
  • 基于vue框架的在线考试系统的设计与实现l9385(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • python编写的一个打砖块小游戏
  • Leetcode做题记录----1
  • 数据结构:有序表的插入
  • @EnableDiscoveryClient和@EnableEurekaClient springboot3.x
  • AI数字人| Fay开源项目、UE5数字人、本地大模型
  • 计算机网络----第一章:概论
  • LLM开源大模型汇总(截止2025.03.09)
  • OpenText ETX 助力欧洲之翼航空公司远程工作升级
  • 2路模拟量同步输出卡、任意波形发生器卡—PCIe9100数据采集卡
  • JSON.parse(JSON.stringify())深拷贝不会复制函数
  • 长方形旋转计算最后的外层宽高,单元测试
  • 习近平向2025年上海合作组织减贫和可持续发展论坛致贺信
  • 上影节公布今年IMAX片单:暗涌、重生与感官的史诗
  • 香港今年新股集资额已超600亿港元,暂居全球首位
  • 张家界一铁路致17人身亡,又有15岁女孩殒命,已开始加装护栏
  • 上海静安将发放七轮文旅消费券,住宿券最高满800元减250元
  • 1至4月全国铁路发送旅客14.6亿人次,创同期历史新高