题目

这个难度感觉并没有那么高,因为这个题暴力也好打,但是比较难想出正解,因为如果你不看标签是很难想到这个题竟然是二分,当然前缀和应该很好想,毕竟让你求的是在某段时间内借教室的和是否满足。

这样我们可以很容易的推出借的教室的个数和订单是成正对应的,因此他可以满足单调性,所以我们就可以用上二分。

而原题中我们可以把天数看成x轴上的横坐标,这天的借教室数可以看成y轴上的纵坐标,而每一次订单的增加,我们就要让从第一个订单到这个订单中的所有订单都加起来,这就像一个区间修改,然后我们在判断的时候就需要用到单点查询这天满不满足。

因此我们可以想到差分数组和前缀和的结合,然后再搭配二分,就ok了。

代码:

// luogu-judger-enable-o2
#include<iostream>
#include<cstring>
#include<cstdio>
#define M 1000010
using namespace std;
struct cym {
int l ,r, d;
} e[M];
int delta[M], sum[M], nul[M], n, m;
bool flag;
bool check(int x) {
memset(delta, , sizeof(delta));
for(int i = ; i <= x; i++) {
delta[e[i].l] += e[i].d;
delta[e[i].r + ] -= e[i].d;
}
for(int i = ; i <= n; i++) {
sum[i] = sum[i - ] + delta[i];
if(sum[i] > nul[i])
return false;
}
return true;
}
int main() {
scanf("%d%d", &n, &m);
for (int i = ; i <= n; i++)
scanf ("%d", &nul[i]);
for (int i = ; i <= m; i++)
scanf ("%d%d%d", &e[i].d, &e[i].l, &e[i].r);
for(int i = ; i <= m; i++) {
delta[e[i].l] += e[i].d;
delta[e[i].r + ] -= e[i].d;
}
for(int i = ; i <= n; i++) {
sum[i] = sum[i - ] + delta[i];
if(sum[i] > nul[i])
flag = ;
}
if(!flag)
{
printf("");
return ;
}
int left = , right = m;
while (left < right) {
int mid = (left+right) / ;
if (check(mid))
left = mid + ;
else
right = mid;
}
printf ("-1\n%d", left);
}

洛谷P1083借教室题解的更多相关文章

  1. 洛谷 P1083 借教室 题解

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

  2. 洛谷P1083 借教室 题解

    题目 [NOIP2012 提高组] 借教室 题解 这道题是几周之前做到的一道题,本来不想讲的,因为这道题也是用到了二分答案的方法,这类题目之前已经发布过两篇题解了.但这道题还运用了差分数组这个思想,所 ...

  3. 【题解】洛谷 P1083 借教室

    目录 题目 思路 \(Code\) 题目 P1083 借教室 思路 线段树.需要的操作为区间修改,区间查询.维护每个区间的最小值就好. \(Code\) #include<iostream> ...

  4. 洛谷P1083 借教室

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

  5. 『题解』洛谷P1083 借教室

    更好的阅读体验 Portal Portal1: Luogu Portal2: LibreOJ Portal3: Vijos Description 在大学期间,经常需要租借教室.大到院系举办活动,小到 ...

  6. NOIP2012 洛谷P1083 借教室

    传送门 题意:有一些学(xian)生(quan)要借教室.在n天内,第i天学校有ri个教室.有m份订单,每份订单有三个数值dj,sj,tj,分别表示这个订单从第sj天开始到第tj天结束(包括端点),每 ...

  7. [NOIP2012] 提高组 洛谷P1083 借教室

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

  8. 洛谷 P1083 借教室【二分+差分/线段树】

    二分mid,然后用1~mid的操作在差分序列上加减,最后把差分序列前缀和起来,看是否有有超过初始r值的 #include<iostream> #include<cstdio> ...

  9. VIjos——V 1782 借教室 | | 洛谷——P1083 借教室

    https://vijos.org/p/1782|| https://www.luogu.org/problem/show?pid=1083 描述 在大学期间,经常需要租借教室.大到院系举办活动,小到 ...

随机推荐

  1. Windows Community Toolkit 4.0 - DataGrid - Overview

    概述 Windows Community Toolkit 4.0 于 2018 月 8 月初发布:Windows Community Toolkit 4.0 Release Note. 4.0 版本相 ...

  2. Heroku + Node.js + HTTPS

    昨天把 biz-to-me 升级到支持 HTTPS 了,为此研究了一下如何让 Heroku 上跑的 Node.js 应用支持 HTTPS.我发现并没有任何文章描述这个具体的流程,只有零碎的信息,所以在 ...

  3. Log4.Net 在Winform、MVC、ashx程序里的使用,ashx程序里使用异步

    最近做一个双11活动的,是一套相关的H5页面.本来以为难度不大,但是做下来几天还是遇到些问题.就总结一下吧,还是有收获的. 1.在H5页面中,有一个遮罩层,还是挺有意思的.直接用div+css控制遮罩 ...

  4. C. Prefixes and Suffixes

    链接 [https://codeforces.com/contest/1092/problem/C] 题意 给你某个字符串的长度n,再给你2*n-2个前缀或者后缀 让你判断那些是前缀那些是后缀 关键是 ...

  5. jQuery基础语法知识梳理

    一.attr() attr()方法设置或返回元素的属性. attr(属性名):获取元素属性名的值. attr(属性名,属性值):设置元素属性名的值. 例子: <a href=”http://12 ...

  6. <iOS开发>之App上架流程(2017)

    本文主要介绍了App上架流程,以及上架过程中会遇到的一些问题. 一.App上架前的准备. 上架前,需要开发人员有苹果开发者账号,具体请阅读苹果开发者账号注册申请流程.本文是在已经拥有开发者账号的前提下 ...

  7. Mysql 中的MVCC原理,undo日志的依赖

    一. MVCC 原理了解   原文点击:MVCC原理浅析 读锁: 也叫共享锁.S锁,若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的 ...

  8. Vue使用的一些实例

    1.实现歌曲的点击切换. <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  9. mysql常用命令行操作(二):表和库的操作、引擎、聚合函数

    一.查看.创建.删除数据库 create database library default character set utf8 collate utf8_general_ci; # 创建数据库并设置 ...

  10. 08-webpack的介绍

    在这里我仅仅的是对webpack做个讲解,webpack这个工具非常强大,解决了我们前端很繁琐的一些工具流程繁琐的事情.如果感兴趣的同学,简易还是看官网吧. 中文链接地址:https://www.we ...