【代码超详解】CODEVS 1217 借教室(NOIP 2012)(二分答案 + 差分 + 前缀和)

luogu P1083/NOIP2012 借教室 题解 P1083 借教室 题目描述 在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。 面对海量租借教室的信息,我们自然希望编程解决这个问题。 我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借。共有m份订单,每份订单用三个正整数描述,分别为dj,sj,tj,表示某租... 阅读详情

一、题目描述

题目描述

在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。
面对海量租借教室的信息,我们自然希望编程解决这个问题。
我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借。共有m份订单,每份订单用三个正整数描述,分别为dj,sj,tj,表示某租借者需要从第sj天到第tj天租借教室(包括第sj天和第tj天),每天需要租借dj个教室。
我们假定,租借者对教室的大小、地点没有要求。即对于每份订单,我们只需要每天提
供dj个教室,而它们具体是哪些教室,每天是否是相同的教室则不用考虑。
借教室的原则是先到先得,也就是说我们要按照订单的先后顺序依次为每份订单分配教室。如果在分配的过程中遇到一份订单无法完全满足,则需要停止教室的分配,通知当前申请人修改订单。这里的无法满足指从第sj天到第tj天中有至少一天剩余的教室数量不足dj个。
现在我们需要知道,是否会有订单无法完全满足。如果有,需要通知哪一个申请人修改订单。

输入输出格式

输入格式:

第一行包含两个正整数n,m,表示天数和订单的数量。
第二行包含n个正整数,其中第i个数为ri,表示第i天可用于租借的教室数量。
接下来有m行,每行包含三个正整数dj,sj,tj,表示租借的数量,租借开始、结束分别在
第几天。
每行相邻的两个数之间均用一个空格隔开。天数与订单均用从1开始的整数编号。

输出格式:

如果所有订单均可满足,则输出只有一行,包含一个整数 0。否则(订单无法完全满足)
输出两行,第一行输出一个负整数-1,第二行输出需要修改订单的申请人编号。

输入输出样例

输入样例#1:

4 3 
2 5 4 3 
2 1 3 
3 2 4 
4 2 4 

输出样例#1:

-1 
2 

说明

【输入输出样例说明】
第 1 份订单满足后,4 天剩余的教室数分别为 0,3,2,3。第 2 份订单要求第 2 天到第 4 天每天提供 3 个教室,而第 3 天剩余的教室数为 2,因此无法满足。分配停止,通知第 2 个申请人修改订单。
【数据范围】
对于10%的数据,有1≤ n,m≤ 10;
对于30%的数据,有1≤ n,m≤1000;
对于 70%的数据,有1 ≤ n,m ≤ 10^5;
对于 100%的数据,有1 ≤ n,m ≤ 10^6,0 ≤ ri,dj≤ 10^9,1 ≤ sj≤ tj≤ n。
【来源】
NOIP 2012 提高组 第二天 第二题

二、算法分析说明与代码编写指导

其实一开始我以为是判断是否可以满足全部订单就行,结果写着写着发现原来题目要求在不满足的时候给出第一个不能满足的订单序号。这时候如果直接模拟一定会 T 到想掀桌子扔椅子,所以要从算法层面上着手优化。
首先因为订单覆盖的天数最多横跨 1 000 000 天,所以不能直接修改这么多天的已租借教室数量并对比每天最多可借的教室数量,不然也会超时。区间总体修改可以考虑分解成相邻项的差和前缀和(前 n 项和)的形式。设 D 为两项差,前缀和为 S 。
如果每处理一个订单然后统计 n 天租借教室总数,总复杂度的最坏情况约为 O(mn) ,仍然超时。
如果二分答案,要验证的答案数量可以用 logM 估计,每次验证答案需要处理 M 个订单,统计全部 n 天的教室租借数量并与每日的可租借教室数量比较,总复杂度就是 O((M + n))logM) ,其中 M < m ,可以 AC 。
首先读入题目所给数据,记二分的左中右端点分别为 L 、M 、R 。satisfied(M) 返回前 M 项订单是否可以满足。如果第 m 项订单都可以满足,即订单能全部满足,则 L = m + 1 ,输出 0 。如果前 M 项订单可以满足,区间向右缩小。如果前 M 项订单不能全满足,区间向左缩小。当 L = R < m 时,M = L = R 为唯一的解。如果前 M 项订单可以满足,那么第一个不能满足而需要修改的订单编号为 M + 1 。如果前 M 项订单不能满足,则第一个不能满足而需要修改的订单编号只能是 M 。
在 satisfied 函数中,如果令

D[s[i]] += d[i], D[t[i] + 1] -= d[i];

然后对 1 到 n 天统计前缀和,第 i 次统计得到的前缀和 S 就为第 i 天为满足前 M 项订单需要租借的教室总数。

三、AC 代码

(跑完全部时间点的总耗时:998 ms)

#include<cstdio>
#include<algorithm>
#pragma warning(disable:4996)
using namespace std;
unsigned L, M, R, m, n, D[1000002], r[1000002], d[1000002], s[1000002], t[1000002], S;
inline bool satisfied(const unsigned& M) {
	S = 0, fill(D + 1, D + n + 1, 0);
	for (unsigned i = 1; i <= M; ++i)D[s[i]] += d[i], D[t[i] + 1] -= d[i];
	for (unsigned i = 1; i <= n; ++i) {
		S += D[i];
		if (S > r[i])return false;
	}
	return true;
}
int main() {
	scanf("%u%u", &n, &m);
	for (unsigned i = 1; i <= n; ++i)scanf("%u", &r[i]);
	for (unsigned i = 1; i <= m; ++i)scanf("%u%u%u", &d[i], &s[i], &t[i]);
	L = 1, R = m;
	while (L <= R) {
		M = (L + R) / 2;
		if (satisfied(M))L = M + 1;
		else R = M - 1;
	}
	if (L > m)puts("0");
	else printf("-1\n%u\n", L);
	return 0;
}
ARM Cortex-M系列授权解析:从研发到量产的免费与付费之路 本文深入解析了ARM Cortex-M系列内核从研发到量产过程中的授权模式。研发阶段可利用ARM DesignStart等免费资源进行原型验证,但产品商业化量产则需支付授权费与版税。文章对比了采购商用MCU与自研芯片的成本差异,并探讨了RISC-V作为免费替代方案在IoT领域的应用前景与挑战,为开发者提供了清晰的选型指南。 阅读详情

相关推荐

ROS激光雷达动态避障算法优化(C++实战)

本文深入探讨了ROS激光雷达动态避障算法的C++实战优化。针对动态环境的核心挑战,文章系统性地介绍了从激光数据预处理(降噪、瘦身)、动态障碍物检测与跟踪,到基于动态窗口法(DWA)的智能决策与调优的全流程。重点分享了如何将障碍物速度预测融入DWA打分函数,以实现更安全、流畅的避障,并提供了工程架构、性能优化及真机调试的实用建议。

weixin_29192141的博客 946

[NOIP] [线段树] NOIP2012Day2 借教室(classroom)

题目描述 Description 在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。 面对海量租借教室的信息,我们自然希望编程解决这个问题。 我们需要处理接下来nn天的借教室信息,其中第ii天学校有rir_i个教室可供租借。共有mm份订单,每份订单用三个正整数描述,分别为dj,s

HeRaNO@HSAHRBNU 2170

深入解析SerDes系统中的时钟数据恢复电路(CDR)——基于Cadence的PLL/Bang-Bang/PS-PI架构实现与仿真

本文深入解析SerDes系统中的时钟数据恢复电路(CDR),重点探讨基于Cadence平台的PLL、Bang-Bang和PS-PI三种架构的实现与仿真。通过详细的技术对比和工程实践案例,揭示CDR在高速串行通信中的关键作用,并提供TSMC 28nm工艺下的优化策略与故障排查经验,助力工程师应对10Gbps以上SerDes设计挑战。

weixin_29202687的博客 251

【每日一题】7月1日题目精讲 借教室

来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 文章目录题目描述题解:差分:二分:整合代码: 题目描述 在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。 面对海量租借教室的信息,我们自然希望编程解决这个问题。 我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借。共有

qq_35975367的博客 1533

从业10年的AI应用架构师:企业AI平台运营的4个核心经验,值得收藏

去年年底,我在某大型制造企业做AI咨询时,遇到了这样的场景:这不是个例。我接触过的10家企业中,有7家的AI平台都陷入了“技术自嗨”的陷阱——技术团队追求模型精度、功能完备性,却忽略了业务到底需要什么。如果你也遇到过类似问题:比如“模型准确率很高,但业务不买账”“AI项目上线后没人用”“投入产出比极低”,那么这篇文章的4个经验,可能会帮你避开这些坑。很多企业认为,AI平台就是“买一套工具+部署几个模型”。但实际上,企业AI平台的本质是“技术与业务的连接生态”:根据Gartner的报告,80%的企业AI项目失

AI 原生应用开发的博客 709

PCB作为智能小车底盘的设计方法与工程实践

PCB底盘是一种将机械结构与电子设计深度融合的嵌入式系统集成方案,其本质是利用印制电路板的高精度制造能力(±0.05mm孔位公差)和FR-4材料的结构强度(弯曲强度345MPa),替代传统亚克力或铝合金底盘。该方案通过封装库驱动的正向设计、机械层语义化定义及机电协同布局,实现安装基准统一、共地平面优化与RF天线集成等技术价值。广泛应用于教育机器人、AGV小车、模块化开发平台等对空间紧凑性、量产一致性与电磁兼容性有严苛要求的移动嵌入式场景,尤其适合具备EDA工具使用能力的电子工程师主导的跨学科开发流程。

weixin_36064575的博客 129

每日一题——借教室

每日一题——借教室 ,需用到二分,差分(前缀和)

z_17623379434的博客 1496

GIS分析-利用K-Means方法进行地震分析

通过“聚类”可以获得有关我们所拥有的数据的各种线索,这是数据挖掘技术之一。分析创建的组有助于决策过程。在这项研究中,我们将使用数据挖掘工具之一的K-Means方法研究安纳托利亚东部地区近100年发生的地震的空间分布,并试图获得有用的信息,以供未来的研究使用。我从局地震目录页面获得了研究所需的地震数据,并从获得了区域边界数据。

gis收藏家的博客 1570

(新版)SJTU-OJ-1022.借教室

题目描述 在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。 面对海量租借教室的信息,我们自然希望编程解决这个问题。 我们需要处理接下来nnn天的借教室信息,其中第ii天学校有rir_iri​ 个教室可供租借。共有mmm份订单,每份订单用三个正整数描述,分别为djd_jdj​,sjs_jsj​,tjt_jtj​,表示某租借者需要从第sjs_jsj​天到第tjt_jtj​天租 借教室(包括第sjs_js

Musicminion的博客 713

Excel数据分析实例

Excel数据分析实例 Excel数据分析五步走: 明确目的——观察数据——数据清洗——数据分析——数据可视化 数据是从Kaggle上下载的,牛油果的案例 目的 数据分析都是为了企业业务做得更好,这次案例主要针对于牛油果的销售量进行分析。 数据 检查是否有缺失值、是否一致化、是否有脏数据 分析 1.不同区域不同季度的牛油果价格走势 从上图中可以看出,东北地区的价格一直较高,而中南地区一直较低 2.2015-2018四年不同城市的销售总和 3.四年间不同城市的销售排名(降序排序) 可视化 1.四年间销

m0_53033371的博客 4369

基于Simulink的永磁同步电机容错控制(缺相容错)

本文基于Simulink平台,详细介绍了永磁同步电机(PMSM)缺相容错控制的仿真实现方法。针对逆变器开路故障导致的缺相问题,提出"检测-重构-补偿"三阶段控制策略:采用电流阈值法快速检测故障(<5ms),重构αβ坐标系实现两相矢量控制,并通过谐波电流注入抑制转矩脉动(<8%)。仿真结果表明,该方法能有效维持故障后电机运行,转速波动<3%,满足电动汽车等关键应用的可靠性需求。文章包含完整的Simulink建模步骤、MATLAB函数代码及参数设置,为工程实践提供了可复现的

xiaoheshang_123的博客 147

[NOIP2012提高组]借教室

题目:洛谷P1083、Vijos P1782、codevs1217。 题目大意:有n天,每天可以借a[i]个教室。有m个请求,每个请求要在一段连续天数内借固定数目的教室。请求只能按顺序批准。求第一个无法批准的请求是第几个请求,或全部可以批准。 解题思路:看到区间,容易想到线段树维护(正解貌似是二分,燃鹅我只能理解线段树啊~)。这里显然只需维护最小值。不过如果姿势不好,可是会T的哟。 ...

367

ENVI_基于无人机数据的果树提取与相对健康监测

一、数据处理 1.计算植被指数VDVI或GDVI:Band Math / Spectral Indices 2.制作掩膜:ROI——Threshold——Subset 二、单地块果树提取 1.绘制感兴趣区shp 2.确定果树提取参数:Count Crops 3.输出果树矢量文件:Convert Crops To Shapefile 4.果树相对健康程度分析:Calculate Crop Me...

提供技术服务、资源分享 429690771 1400

P1083 借教室

https://www.luogu.com.cn/problem/P1083 题目描述 在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。 面对海量租借教室的信息,我们自然希望编程解决这个问题。 我们需要处理接下来nn天的借教室信息,其中第ii天学校有r_iri​个教室可供租借。共有mm份订单,每份订单用三个正整数描述,分别为d_j,s_j,t_jdj​,sj​,tj​,表示某租借者需要从第s_

代码笔记本 399

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

洛谷 P1083 [NOIP2012 D2T2] 借教室

二分

依然一笑作春温。 1167

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。 面对海量租借教室的信息,我们自

思路:将每天的固定的可租借的教室的数量存入一个列表,获取订单后,将订单指定的时间的内的需要的教室数量提取出来,列表减去订单对应时间的教室数目(例如订单描述:从第一天到第二天每天需要2的教室,则列表对应第一天到的教室数量减去2,列表对应第二天到的教室数量减去2),然后来个检测判断列表里是否存在负数,如果是负数则说明当前的订单所需要的教室数量已经超出可以提供的教室数量。即对于每份订单,我们只需要每天提供 dj​ 个教室,而它们具体是哪些教室,每天是否是相同的教室则不用考虑。

qq_64351561的博客 583

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【noip2012】借教室

题目描述在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。面对海量租借教室的信息,我们自然希望编程解决这个问题。我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借。共有m份订单,每份订单用三个正整数描述,分别为dj,sj,tj,表示某租借者需要从第sj天到第tj天租借教室(包

A_Comme_Amour的博客 495

借教室-NOIP2012提高组-题解

经典的二分+差分

2301_79935713的博客 536

Luogu P1083 借教室【二分答案/差分】By cellur925

题目描述 Description 在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。 面对海量租借教室的信息,我们自然希望编程解决这个问题。 我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借。共有m份 订单,每份订单用三个正整数描述,分别为dj,sj...

weixin_30869099的博客 206

洛谷P1083 借教室 (差分数组,二分)

共有 $m$ 份订单,每份订单用三个正整数描述,分别为 $d_j,s_j,t_j$,表示某租借者需要从第 $s_j$ 天到第 $t_j$ 天租借教室(包括第 $s_j$ 天和第 $t_j$ 天),每天需要租借 $d_j$ 个教室。第 $2$ 份订单要求第 $2$ 天到第 $4$ 天每天提供 $3$ 个教室,而第 $3$ 天剩余的教室数为 $2$,因此无法满足。第二行包含 $n$ 个正整数,其中第 $i$ 个数为 $r_i$,表示第 $i$ 天可用于租借的教室数量。天数与订单均用从 $1$ 开始的整数编号。

Moapsw033的博客 608

AcWing 503.借教室

【代码】AcWing 503.借教室。

weixin_68718700的博客 617

刷题记录|[NOIP2012]借教室题解

在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。面对海量租借教室的信息,我们自然希望编程解决这个问题。我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借。共有m份订单,每份订单用三个正整数描述,分别为dj, sj, tj,表示某租借者需要从第sj天到第tj天租借教室(包括第sj天和第tj天),每天需要租借dj个教室。我们假定,租借者对教室的大小、地点没有要求。

Garry_c的博客 649

[NOIP2012 提高组] 借教室

这道问题涉及在大学期间租借教室的安排,其中有多天的教室可供租借,而每份订单描述了租借者在一定时间范围内所需的教室数量。要求通过编程解决问题,判断是否存在订单无法完全满足,并通知相应的申请人修改订单。解决方案采用了差分数组和前缀和的方法,通过二分查找优化算法,提高了效率。采用差分数组记录每天需要的教室数量变化,然后通过前缀和检查每天的剩余教室是否满足订单要求。利用二分查找优化算法,有效减少时间复杂度。如果所有订单均可满足,则输出0;否则,输出-1和需要修改订单的申请人编号。

Achilles0705的博客 1043

503. 借教室

503. 借教室 题意: 在大学期间,经常需要租借教室。 大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。 教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。 面对海量租借教室的信息,我们自然希望编程解决这个问题。 我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借。 共有m份订单,每份订单用三个正整数描述,分别为dj,sj,tj,表示某租借者需要从第sj天到第tj天租借教室(包括第sj天和第tj天),每天需要租借dj个教室。 我们假定,租借者对教室的大小、地

qq_35975367的博客 197

P1083 [NOIP2012 提高组] 借教室 题解

P1083 [NOIP2012 提高组] 借教室 题解

yaosichengalpha的博客 1163

线段树(懒惰标记法)--题目牛客借教室

线段树–牛客借教室 链接:https://ac.nowcoder.com/acm/problem/16564 来源:牛客网 在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。 面对海量租借教室的信息,我们自然希望编程解决这个问题。 我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借。共有m份订单,每份订单用三个正整数描述,分别为dj, sj, tj,表示某租借者需要从第sj天到第t

CoIorful的博客 445
上一篇: 【代码超详解】CODEVS 4768 跳石头(NOIP 2015 河中跳房子)(二分答案)
下一篇: 【代码超详解】CODEVS 1138 聪明的质监员(NOIP 2011)(二分答案 + 差分 + 前缀和)
山上一缕烟
博客等级 码龄8年 269粉丝 498原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值