Acwing.503 借教室(二分)

题目

在大学期间,经常需要租借教室。

大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室。

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

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

我们需要处理接下来 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≤n,m≤106,0≤ri,dj≤109,1≤sj≤tj≤n

  • 输入样例:
4 3
2 5 4 3
2 1 3
3 2 4
4 2 4
  • 输出样例:
-1
2

题解

import java.util.Arrays;
import java.util.Scanner;/*** @author akuya* @create 2024-02-29-16:59*/
public class Main {static int N=1000010;static int M=N;static int n,m;static int num[];static int l[]=new int[M];static int r[]=new int[M];static long b[]=new long[N];static int v[]=new int[N];public static void main(String[] args) {Scanner scanner=new Scanner(System.in);n=scanner.nextInt();m=scanner.nextInt();num=new int[n+1];for(int i=1;i<=n;i++){num[i]=scanner.nextInt();}for(int i=1;i<=m;i++){v[i]=scanner.nextInt();l[i]=scanner.nextInt();r[i]=scanner.nextInt();}int l=0;int r=m;while(l<r){int mid=l+r+1>>1;if(check(mid)) l=mid;else r=mid-1;}if(r==m) System.out.println(0);else{System.out.println("-1");System.out.println(r+1);}}public static boolean check(int mid){Arrays.fill(b,0);for(int i=1;i<=mid;i++){b[l[i]]+=v[i];b[r[i]+1]-=v[i];}for(int i=1;i<=n;i++){b[i]+=b[i-1];if(b[i]>num[i]){return false;}}return true;}
}

思路

这道题运用了前缀和与拆分的思想,通过二分查找mid及以前的天数是否会让教室不够,如果最后r=请求数,则能完成数量要求,不等于则输出r+1,为导致超出预计的编号。二分时间复杂度logn,拆分时间复杂度为n,时间复杂度为nlogn,刚好满足时间复杂度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/737278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2.4_4 死锁的检测和解除

文章目录 2.4_4 死锁的检测和解除&#xff08;一&#xff09;死锁的检测&#xff08;二&#xff09;死锁的解除 总结 2.4_4 死锁的检测和解除 如果系统中既不采取预防死锁的措施&#xff0c;也不采取避免死锁的措施&#xff0c;系统就很可能发生死锁。在这种情况下&#xff0c;…

sql-mysql可视化工具Workbench导入sql文件

mysql可视化工具Workbench导入sql文件 1、打开workbench2、导入sql文件3、第一行加上库名4、开始运行 1、打开workbench 2、导入sql文件 3、第一行加上库名 4、开始运行

C++基础语法和概念

基本语法和数据类型 C 是一种高性能的编程语言&#xff0c;允许程序员对内存管理进行精细控制。了解 C 的基本语法和数据类型是学习这门语言的第一步。以下是一些基础概念的详细介绍&#xff1a; 基本语法 程序结构 一个基础的 C 程序通常包括一个或多个头文件引用、一个 m…

【图(1)】:用邻接矩阵和邻接表实现图

目录 一、图的基本概念 二、图的存储结构 1.邻接矩阵 2.邻接表 一、图的基本概念 注意&#xff1a;概念性的文字不列出太多&#xff0c;记不住也不便于理解 图&#xff08;Graph&#xff09;是由节点&#xff08;Node&#xff09;和边&#xff08;Edge&#xff09;组成的…

Vue 监听器:让你的应用实时响应变化

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

AI与自动化控制

AI与自动化控制的结合可以实现更加智能和自适应的控制系统。以下是一些AI与自动化控制结合的实例&#xff1a; 智能交通信号灯控制系统&#xff1a; 利用AI分析交通流量数据&#xff0c;实时调整信号灯的时序&#xff0c;以优化交通流动和提高道路通行效率。 工业自动化机器人…

PrintWriter使用

/*** Description PrintWriter使用* * 演示 PrintWriter的使用* author AI福*/ package com.chapter3.demo02;import java.io.PrintWriter;public class Demo07 {public static void main(String[] args) throws Exception{//1.创建打印流PrintWriter pw new PrintWriter(&quo…

CSS居中对齐 (水平垂直居中对齐)

方案一&#xff1a;flex布局【推荐】 给容器添加样式 display: flex; justify-content: center; align-items: center; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" conte…

AcWing 4262. 空调(每日一题)

题目链接&#xff1a;4262. 空调 - AcWing题库 Farmer John 的 N 头奶牛对他们牛棚的室温非常挑剔。 有些奶牛喜欢温度低一些&#xff0c;而有些奶牛则喜欢温度高一些。 Farmer John 的牛棚包含一排 N 个牛栏&#xff0c;编号为 1…N&#xff0c;每个牛栏里有一头牛。 第 i…

第三百九十六回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何混合选择多个图片和视频文件"相关的内容&#xff0c;本章回中将介绍显示Snackbar的另外一种方法.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1…

完美十进制数——去年天梯校赛

7-4 完美十进制数 对于一个十进制正整数 x&#xff0c;其包含 k 个位&#xff0c;每个数位的数字累加和为 sum 。如果 sum%k0&#xff0c;那么这个十 进制数就是完美的。 例&#xff1a;对于数 12340&#xff0c;包含 5 位&#xff0c;数位累加和为 10&#xff0c;10%50&#x…

算法-贪心-122. 糖果传递

题目 有 n个小朋友坐成一圈&#xff0c;每人有 a[i]个糖果。 每人只能给左右两人传递糖果。 每人每次传递一个糖果代价为 1。 求使所有人获得均等糖果的最小代价。 输入格式 第一行输入一个正整数 n&#xff0c;表示小朋友的个数。 接下来 n 行&#xff0c;每行一个整数…

【组合递归回溯】【StringBuilder】Leetcode 17. 电话号码的字母组合

【组合递归回溯】【StringBuilde】Leetcode 17. 电话号码的字母组合 StringBulider常用方法&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;17…

JavaScript实现通过键盘弹钢琴的效果

本片文章通过触发键盘事件来触发对应的音乐&#xff0c;而且给页面添加了渐变的active类名&#xff0c;通过触发不同的鼠标事件&#xff0c;然后active类移动来实现按下钢琴键的视觉效果。 关键代码&#xff1a; <!DOCTYPE html> <html lang"en"><h…

十堰网站建设公司华想科技具有10年的网站制作经验

2018年已经结束了。 华翔科技收到了很多客户的咨询&#xff0c;他们都有一个共同的问题&#xff1a;建一个网站需要多少钱&#xff1f; 但是&#xff0c;我们都会问&#xff1a;您有什么具体需求吗&#xff1f; 大多数人的答案是否定的&#xff0c;他们只是想打听一下价格。 十…

嵌入式3-11

1、整理思维导图 2、尝试学生结构体数组&#xff0c;完成成员的输入&#xff0c;以成绩为条件完成对学生成员的冒泡排序并输出&#xff08;全部在主函数内完成&#xff09; #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.…

Django——模板

Django——模板 Django 提供一种动态生成 HTML 页面 —— 模板 1、模板语言 模板语言(DTL): 变量 &#xff0c; 注释 &#xff0c; 标签 &#xff0c; 过滤器 &#xff0c; 模板继承 1、变量 <body> <!-- 这个是前端中的注释 --> {# 这种是Django中模板语言的…

25改考408最新资讯!拷贝

东北大学 东北大学计算机考研全面改考408 东北大学计算机学院官网&#xff1a;http://www.cse.neu.edu.cn/6274/list.htm 东北大学计算机考研全面改考408 公告原文 东北大学计算机科学与工程学院关于调整2025年硕士研究生招生计算机科学与技术、计算机技术、人工智能专业初试…

【JAVA类】利用接口的多继承实现———图书管理系统【附源码】

引言 在我们学习了一些java的基础语法之后&#xff0c;需要把这些知识点可以串起来&#xff0c;这里使用一个简单的小项目可以很好的帮助我们牢记这些知识点&#xff0c;今天就带大家学习一个有关java的小项目&#xff0c;很多学校也经常把这个项目作为他们的课程设计——经典的…

从零学习Linux操作系统 第三十二部分 Ansible中的变量及加密

一、变量的基本设定及使用方式 变量命名&#xff08;与shell相同&#xff09;&#xff1a; 只能包含数字&#xff0c;下划线&#xff0c;字母 只能用下划线或字母开头 .变量级别&#xff1a; 全局从命令行或配置文件中设定的paly:在play和相关结构中设定的主机:由清单&…