WikiOI 1217 借教室 (线段树lazy标记)(95分)

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

1217 借教室 2012年NOIP全国联赛提高组
时间限制: 1 s
空间限制: 128000 KB
题目等级 : 钻石 Diamond
题解
题目描述 Description
在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要

向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。

面对海量租借教室的信息,我们自然希望编程解决这个问题。

我们需要处理接下来n天的借教室信息,其中第i天学校有ri个教室可供租借。共有m份

订单,每份订单用三个正整数描述,分别为dj, sj, tj,表示某租借者需要从第sj天到第tj天租

借教室(包括第sj天和第tj天),每天需要租借dj个教室。

我们假定,租借者对教室的大小、地点没有要求。即对于每份订单,我们只需要每天提

供dj个教室,而它们具体是哪些教室,每天是否是相同的教室则不用考虑。

借教室的原则是先到先得,也就是说我们要按照订单的先后顺序依次为每份订单分配教

室。如果在分配的过程中遇到一份订单无法完全满足,则需要停止教室的分配,通知当前申

请人修改订单。这里的无法满足指从第sj天到第tj天中有至少一天剩余的教室数量不足dj个。

现在我们需要知道,是否会有订单无法完全满足。如果有,需要通知哪一个申请人修改

订单。

输入描述 Input Description
第一行包含两个正整数n, m,表示天数和订单的数量。

提高组 day2

第二行包含n个正整数,其中第i个数为ri,表示第i天可用于租借的教室数量。

接下来有m行,每行包含三个正整数dj, sj, tj,表示租借的数量,租借开始、结束分别在

第几天。

每行相邻的两个数之间均用一个空格隔开。天数与订单均用从1开始的整数编号。

输出描述 Output Description
如果所有订单均可满足,则输出只有一行,包含一个整数 0。否则(订单无法完全满足)

输出两行,第一行输出一个负整数-1,第二行输出需要修改订单的申请人编号。

样例输入 Sample Input
4 3

2 5 4 3

2 1 3

3 2 4

4 2 4

样例输出 Sample Output
-1

2

数据范围及提示 Data Size & Hint
【输入输出样例说明】

classroom.out

-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 ≤ 105;

对于 100%的数据,有1 ≤ n, m ≤ 10^6, 0 ≤ ri, dj≤ 10^9, 1 ≤ sj≤ tj≤ n。

其实我已经写过这道题的二分写法了,但是我第一眼看这道题觉得这是个线段树,可惜当时没有一次性写出来。 现在写出来了但是被卡了一个点,有一个点超时只有95分,老师说这一题用线段树只能写到95了,于是把这种做法也发一下

program mys;

type
ab=record
l,r,w,c:longint;
end;

var i,j,k,m,n,t,b,c,tot,p,s:longint;
f:array[0..2000000]of ab;
a:array[0..1000100]of longint;

procedure built(x,y,i:longint);
var mid:longint;
begin
f[i].l:=x;
f[i].r:=y;
if (x=y) then
begin
f[i].w:=a[x];
exit;
end;
mid:=(x+y)div 2;
built(x,mid,i*2);
built(mid+1,y,i*2+1);
if f[i*2].w<=f[i*2+1].w then
f[i].w:=f[i*2].w
else
f[i].w:=f[i*2+1].w;
end;

procedure change(x,y,k:longint);
var mid:longint;
begin 
if (f[k].l=x)and(f[k].r=y) then 
begin 
if f[k].c<>0 then 
begin 
f[k*2].w:=f[k*2].w-f[k].c;
f[k*2].c:=f[k*2].c+f[k].c;
f[k*2+1].w:=f[k*2+1].w-f[k].c;
f[k*2+1].c:=f[k*2+1].c+f[k].c;
f[k].c:=0;
end;
f[k].w:=f[k].w-p;
if f[k].w<0 then 
begin 
writeln(-1);
writeln(i);
halt;
end;
f[k].c:=f[k].c+p;
exit;
end;
if f[k].c<>0 then 
begin 
f[k*2].w:=f[k*2].w-f[k].c;
f[k*2].c:=f[k*2].c+f[k].c;
f[k*2+1].w:=f[k*2+1].w-f[k].c;
f[k*2+1].c:=f[k*2+1].c+f[k].c;
f[k].c:=0;
end;
mid:=(f[k].l+f[k].r)div 2;
if y<=mid then change(x,y,k*2)
else if x>mid then change(x,y,k*2+1)
else 
begin 
change(x,mid,k*2);
change(mid+1,y,k*2+1);
end;
if f[k*2].w<=f[k*2+1].w then
f[k].w:=f[k*2].w
else
f[k].w:=f[k*2+1].w;
end;

begin 
readln(n,m);
for i:=1 to n do 
read(a[i]);
built(1,n,1);
for i:=1 to m do 
begin 
readln(p,s,t);
change(s,t,1);
end;
writeln(0);
end.
LUOGU P1083 借教室 P1083 借教室 题目描述 在大学期间,经常需要租借教室。大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样。 面对海量租借教室的信息,我们自然希望编程解决这个问题。 我们需要处理接下来nn天的借教室信息,其中第i天学校有ri个教室可供租借。共有m份订单,每份订单用三个正整数描述,分别为dj,sj,tj,表示某租借者需要从... 阅读详情

相关推荐

绕过卡巴斯基通过RPC控制lsass注入DLL

参考国外的XPN以及3gstudent大佬的文章: https://blog.youkuaiyun.com/xiangshen1990/article/details/104872566 https://gist.github.com/xpn/93f2b75bf086baf2c388b2ddd50fb5d0 原理:正常的ssp扩展(dll)可以加载到lsass进程中去,比如kerberos验证都是通...

2ed 3524

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

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

HeRaNO@HSAHRBNU 2170

【YOLO 系列】基于YOLO V8的智能车载交通标志识别系统【python源码+Pyqt5界面+数据集+训练代码】

本文详细介绍了基于YOLO V8构建智能车载交通标志识别系统的完整流程。从环境搭建、数据集准备、模型训练到PyQt5图形界面开发,提供了Python源码和实战代码,帮助开发者快速实现高精度、实时的交通标志检测应用,提升驾驶辅助系统的开发效率。

wdx012345的博客 966

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

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

Musicminion的博客 712

【蓝桥杯——单片机学习笔记】十三.点阵(STC15F2K60S2)

一.点阵内部图 点阵的有两种,分为共阴和共阳(与数码管类似,后续代码根据共阳点阵编写)。点阵的控制主要是每行和每列电平的控制。如图,以共阳为例:若要使左上角的灯亮,则第一行输出高电平(其他行均为低电平),第一列输出低电平(其他列均为高电平)。 二.原理图 与数码管共用接口,所以数码管和点阵的显示只能选一个使用! 原理图中点阵的接口R5即代表第5行(Row),C8即代表第8列(Column)。通...

默默无闻小菜鸡的博客 2011

C语言实现惯导系统的间接粗对准

间接粗对准方法具有更好的角晃动抗干扰能力,只是在短时间内线晃动抗干扰能力相对弱些,若适当延长粗对准时间(一般在分钟量级),间接粗对准方法往往都能够取得良好的效果。间接粗对准方法是一种非常实用的捷联惯导粗对准方法,得到了广泛的应用。在惯导系统进入工作前,需要进行初始对准,使得惯导系统与当地导航坐标系指向一致,便于惯导系统更好地进入工作状态。博主利用C语言实现了间接粗对准,间接粗对准较之解析粗对准更有优势。以上函数中使用的其他函数块,已在之前或之后的博客中给出。

十八与她的博客 789

每日一题——借教室

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

z_17623379434的博客 1496

手把手教你学Simulink——基于Simulink的CLLC谐振变换器双向对称控制

本文介绍了一种基于Simulink的CLLC谐振变换器双向对称控制方法。针对CLLC拓扑的多阶谐振特性,采用固定频率、50%占空比、仅调节相位差的对称控制策略,实现了宽电压范围调节和全负载ZVS软开关。详细阐述了Simulink建模步骤,包括功率级搭建、相位差生成逻辑和双向切换实现,并通过仿真验证了稳态性能和双向无缝切换能力。该方法解决了传统PFM控制的不足,具有控制简单、效率高、易于工程实现的优势,适用于车载充电和储能系统等双向功率应用场景。

MHD0815的博客 302

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

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

qq_35975367的博客 1531

手把手安装GNN必备库 —— pytorch_geometric

PyG全称是Pytorch Geometric,它是一个基于Pytorch构建的库,可以帮助用户快速构建和训练自己的图神经网络模型。PyG中实现了很多先进(state of the art)的GNN模块,例如GCN、GraphSage、GAT、SGC、GIN等等。此外,PyG中还包含了大量的benchmark图数据集、丰富的图数据操作方法、支持多GPU。

m0_51339444的博客 2380

New API 大模型网关保姆级教程:Docker Compose 部署 + MiniMax 接入 Claude 实战

New API 是一个开源的 AI 基座平台,提供统一的 API 接口接入 30+主流 AI 服务(如 OpenAI、Claude 等)。核心功能包括智能路由、精细计费、安全管控和多租户支持,采用 AGPLv3 协议开源。支持 Docker Compose 快速部署,通过修改配置文件即可连接不同数据库,适合从开发到生产环境的不同规模应用。部署时需注意修改默认密码等安全配置。

甘蓝的专栏 1602

P1083 借教室

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

代码笔记本 399

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

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

COFACTOR 384

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

洛谷 P1083 [NOIP2012 D2T2] 借教室

二分

依然一笑作春温。 1167

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

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

qq_64351561的博客 583

P1083 借教室java和C++代码全解

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

wxr 704

【noip2012】借教室

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

A_Comme_Amour的博客 495

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

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

weixin_30869099的博客 206

AcWing 503.借教室

【代码】AcWing 503.借教室。

weixin_68718700的博客 617

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

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

Garry_c的博客 649

洛谷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

[NOIP2012 提高组] 借教室

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

Achilles0705的博客 1043

借教室-NOIP2012提高组-题解

经典的二分+差分

2301_79935713的博客 536

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

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

CoIorful的博客 445

关于二分的一点点体会

二分的应用主要是用在二分查找上,他最基础的应用,就是在一个有序数组中查找某个数 int l=1,r=n; while(l<r) { int mid=(l+r)>>1; if(check(mid))r=mid-1; else r=mid+1; }

qq_40791907的博客 259
上一篇: WikiOI 4600 程序自动分析 (哈希+并查集)
下一篇: WikiOI 2370 小机房的树 (最裸LCA)
CodeOnce
博客等级 码龄10年 3粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值