【洛谷P1083】[NOIP2012]借教室
借教室
【题目描述】
在n天中每天有一个可以借出的教室数,有m个订单,每个订单从第l天到第r天要借用x个教室。问能否满足所有的订单,若不能,输出第一个不能满足的订单编号。
思路:
1.1 ≤ n,m ≤ 10^6,区间的整体修改可以用差分数组实现,每次修改的时间复杂度为O(1),查询的时间复杂度为O(n)。
2.若从第一个订单到第m个订单向上枚举,每次都利用差分数组算一遍每天的订单数,时间为O(m*n);但从题目中“输出第一个不能满足的订单编号”可以得到启示:二分答案。
时间复杂度就成了O(nlogm)。
补充:
差分数组的原理:
差分数组与部分和数组相类似
部分和数组是用每个数据记录原数组中多个元素的和(前缀和 或 后缀和),利用两个数据的差求原数组中多个数据的和,以前缀和数组为例, sum[i]=data[1]+data[2]+data[3]+……+data[i]
sum[i]-sum[j-1]=(data[1]+data[2]+data[3]+……+data[i])-(data[1]+data[2]+data[3]+……+data[j-1])
=data[j]+data[j+1]+……+data[i]。
差分数组每个数据记录原数组中该元素与其上一个元素的差,即diff[i]=data[i]-data[i-1],显然:
data[i]=data[i-1]+diff[i]=data[i-2]+diff[i-1]+diff[i]=……
=diff[1]+diff[2]+diff[3]+……+diff[i]
我们可以这样描述:data数组是diff数组的前缀和数组
一个显而易见的性质:当diff[i]改变时,data[i~n]的值会有相同的改变,如diff[i]+=1,diff[j+1]-=1,就相当于区间[i,j]都加了1,这样便可以用O(1)的时间实现区间修改了。
贴代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int data[],l[],r[],d[],diff[],n,m,f,g;
bool isok(int x)
{
memset(diff,,sizeof(diff));
for(int i=;i<=x;i++) //订单 1~x
{
diff[l[i]]+=d[i]; //差分数组
diff[r[i]+]-=d[i];
}
int sum=;
for(int i=;i<=n;i++)
{
sum+=diff[i];
if(sum>data[i]) return ;
}
return ;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%d",&data[i]);
for(int i=;i<=m;i++)
scanf("%d%d%d",&d[i],&l[i],&r[i]);
if(isok(m))
{
printf("");
return ;
}
printf("-1\n");
f=;g=m;
while(f<g) //二分订单数
{
int mid=(f+g)/;
if(isok(mid)) f=mid+;
else g=mid;
}
printf("%d\n",f);
return ;
}
【洛谷P1083】[NOIP2012]借教室的更多相关文章
- 洛谷 1083 (NOIp2012) 借教室——标记永久化线段树 / 差分+二分
题目:https://www.luogu.org/problemnew/show/P1083 听说线段树不标记永久化会T一个点. 注意mn记录的是本层以下.带上标记的min! #include< ...
- 洛谷P1083 [NOIP2012提高组Day2T2]借教室
P1083 借教室 题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借 ...
- 【NOIP2012】【CJOJ1093】【洛谷1083】借教室
我写的是不完美算法!!! 题面 Description 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的 ...
- 【分块】【常数优化】【Orz faebdc】洛谷 P1083 NOIP2012提高组 借教室
分块90分. By AutSky_JadeK [重点在下面] #include<cstdio> #include<cmath> using namespace std; #de ...
- NOIP2012借教室[线段树|离线 差分 二分答案]
题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自 ...
- NC16564 [NOIP2012]借教室
NC16564 [NOIP2012]借教室 题目 题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借 ...
- [NOIP2012] 提高组 洛谷P1083 借教室
题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然 ...
- NOIP2012 洛谷P1083 借教室
传送门 题意:有一些学(xian)生(quan)要借教室.在n天内,第i天学校有ri个教室.有m份订单,每份订单有三个数值dj,sj,tj,分别表示这个订单从第sj天开始到第tj天结束(包括端点),每 ...
- 洛谷P1083 借教室
P1083 借教室 题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借 ...
随机推荐
- 第十八章:自定义splash screen、app icon和tab icon
本文介绍如何自定义splash screen.app icon和tab icon. 1. 自定义splash screen和app icon 1.1 产生resources文件夹,启动命令行: ion ...
- Flask 框架理解(一)
Flask 框架理解(一) web 服务器 , web 框架 以及 WSGI 这里说的 web 服务器特指纯粹的 python HTTP 服务器(比如 Gunicorn,而不是 Apache,Ngin ...
- AndroidManifest.xml配置文件详解(转载)
AndroidManifest.xml配置文件详解 2013-01-05 10:25:23 分类: Android平台 AndroidManifest.xml配置文件对于Android应用开发来说是 ...
- 4.net两种交互模式
.net两种交互模式 (1) C/S:客户端(Client)/服务器模式(Server) (2) B/S:浏览器(Browser)/服务器模式(Server) 来自为知笔记(Wiz)
- 成长之路--Docker入门
简介 Docker是一种新兴的虚拟化技术,能够一定程度上的代替传统虚拟机. Docker版本 Docker 划分为CE 和EE.CE 即社区版(免费,支持周期三个月),EE 即企业版,强调安全,付费使 ...
- 3.storm-starter打包在storm集群上运行
1.使用maven或者其他打包工具将storm-starter打成jar包 2.请将jar包用解压工具打开在根目录下找到defaults.yaml文件并将其删除不然到时会报有multiply defa ...
- js中实现多态
最近读到一本书<JavaScript设计模式与开发实践>上,讲到js的多态,我在JavaScript高级程序编程里貌似都没有见过关于这个的详细讲解,所以想问问大家有没有什么推荐的文章或者博 ...
- 【CSAPP-南大视频】Week1-计算机系统概述
本笔记基于中国大学Mooc <计算机系统基础(一):程序的表示.转换与链接>课程,由 南京大学袁春风教授授课. 教材<深入理解计算机系统> 课程总目标:理解计算机是如何生成和运 ...
- Android 自定义倾斜字体
public class RotateTextView extends AppCompatTextView { private static final int DEFAULT_DEGREES = 0 ...
- Not able to find Java executable or version转载
转载地址:https://blog.csdn.net/qq_40902122/article/details/79437991 findstr' 不是内部或外部命令,也不是可运行的程序或批处理文件.N ...