当前位置: 首页 > news >正文

Acwing 503. 借教室

Problem: 503. 借教室

文章目录

  • 思路
  • 解题方法
  • 复杂度
  • Code

思路

这是一个二分查找问题。我们需要找到最大的借教室数量,使得每个教室的借用时间不超过其可用时间。我们可以通过二分查找来找到这个最大的借教室数量。

解题方法

我们首先对所有的借教室请求按照结束时间进行排序。然后我们使用二分查找来找到最大的借教室数量。对于每个借教室数量,我们检查是否所有的教室都可以在其可用时间内完成借用。我们使用一个差分数组来记录每个教室的借用时间。对于每个借教室请求,我们在其开始时间处加上借用时间,然后在其结束时间后一天减去借用时间。然后我们从前到后累加差分数组,如果某一天的累加值超过了教室的可用时间,那么这个借教室数量就不可行。

复杂度

时间复杂度:

O ( n l o g n ) O(n log n) O(nlogn),其中 n 是借教室请求的数量。我们需要对所有的请求进行排序,然后对每个可能的借教室数量进行检查。

空间复杂度:

O ( n ) O(n) O(n),我们需要使用一个差分数组来记录每个教室的借用时间。

Code

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.Arrays;public class Main {static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));static StreamTokenizer sr = new StreamTokenizer(in);static int MAXN = (int) 1e6 + 10;static int[] w = new int[MAXN];static long[] dif = new long[MAXN];static int[][] rent = new int[MAXN][3];static int n, m;public static void main(String[] args) throws IOException {n = nextInt();m = nextInt();for (int i = 1; i <= n; i++) {w[i] = nextInt();}for (int i = 1; i <= m; i++) {rent[i][2] = nextInt();rent[i][0] = nextInt();rent[i][1] = nextInt();}int l = 0, r = m;while (l < r) {int mid = l + r + 1 >> 1;if (check(mid)) {l = mid;} else {r = mid - 1;}}if (r == m) {out.println(0);} else {out.println(-1);out.println(r + 1);}out.flush();}private static boolean check(int mid) {// TODO Auto-generated method stubArrays.fill(dif, 0);for(int i = 1; i <= mid; i++) {dif[rent[i][0]] += rent[i][2];dif[rent[i][1] + 1] -= rent[i][2];}for(int i = 1; i <= n; i++) {dif[i] += dif[i - 1];if(dif[i] > w[i]) {return false;}}return true;}static int nextInt() throws IOException {sr.nextToken();return (int) sr.nval;}}

相关文章:

Acwing 503. 借教室

Problem: 503. 借教室 文章目录 思路解题方法复杂度Code 思路 这是一个二分查找问题。我们需要找到最大的借教室数量&#xff0c;使得每个教室的借用时间不超过其可用时间。我们可以通过二分查找来找到这个最大的借教室数量。 解题方法 我们首先对所有的借教室请求按照结束时间…...

吴恩达深度学习笔记:浅层神经网络(Shallow neural networks)3.1-3.5

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第三周&#xff1a;浅层神经网络(Shallow neural networks)3.1 神经网络概述&#xff08;Neural Network Overview&#xff09;3.2 神经网络的表示&#xff08;Neural Network Representation…...

Linux设备驱动开发 - 三色LED呼吸灯分析

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 展锐UIS7885呼吸灯介绍呼吸灯调试方法亮蓝灯亮红灯亮绿灯展锐UIS7885呼吸灯DTS配置ump9620 PMIC驱动ump9620中的LED呼吸灯驱动LED的tr…...

开发者的瑞士军刀:DevToys

DevToys&#xff1a; 一站式开发者工具箱&#xff0c;打造高效创意编程体验&#xff0c;让代码生活更加得心应手&#xff01;—— 精选真开源&#xff0c;释放新价值。 概览 不知道大家是否在windows系统中使用过PowerToys&#xff1f;这是微软研发的一项免费实用的系统工具套…...

【vue3.0】实现导出的PDF文件内容是红头文件格式

效果图: 编写文件里面的主要内容 <main><div id"report-box"><p>线索描述</p><p class"label"><span>线索发现时间:</span> <span>{{ detailInfoVal?.problem.createdDate }}</span></p><…...

【CSP试题回顾】202012-2-期末预测之最佳阈值(优化)

CSP-202012-2-期末预测之最佳阈值 关键点 1.map的遍历方式 map<int, int>occ0Num, occ1Num; for (auto it thetaSet.begin(); it ! thetaSet.end(); it) {num num occ0Num[*it] - occ1Num[*it];auto nextIt next(it); // 获取下一个迭代器if (num > maxNum &a…...

docker学习笔记 三-----docker安装部署

我使用的部署环境是centos 7.9 1、安装依赖工具 yum install -y yum-utils device-mapper-persistent-data lvm2 安装完成如下图 2、添加docker的软件信息源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo url地址为如…...

FastAPI+React全栈开发02 什么是FARM技术栈

Chapter01 Web Development and the FARM Stack 02 What is the FARM stack and how does it fit together? FastAPIReact全栈开发02 什么是FARM技术栈 It is important to understand that stacks aren’t really special, they are just sets of technologies that cover…...

C#程序结构详解

目录 背景: 一、C#程序的基本组成部分 二、C# Hello World示例 三、程序结构解析 四、编译与执行C#程序 五、总结 背景: 在学习C#编程语言的过程中&#xff0c;了解程序的基本结构是非常重要的。C#程序由多个组成部分构成&#xff0c;每个部分都有其特定的功能和作用。下面…...

linux 清理空间

1. 根目录下执行命令&#xff0c;查看每个目录下文件大小总和 rootvm10-88-88-3 /]# du -h --max-depth1 79M ./tmp 123M ./etc 4.0K ./media 4.0K ./srv 104M ./boot 5.3G ./var 0 ./sys 8.6M ./dev 196G ./usr 4.0K ./mnt 285M ./opt…...

C语言:给结构体取别名的4种方法

0 前言 在进行嵌入式开发的过程中&#xff0c;我们经常会见到typedef这个关键字&#xff0c;这个关键字的作用是给现有的类型取别名&#xff0c;在实际使用过程中往往是将一个复杂的类型名取一个简单的名字&#xff0c;便于我们的使用。就像我们给很熟的人取外号一样&#xff…...

今天聊聊Docker

在数字化时代&#xff0c;软件应用的开发和部署变得越来越复杂。环境配置、依赖管理、版本控制等问题给开发者带来了不小的挑战。而Docker作为一种容器化技术&#xff0c;正以其独特的优势成为解决这些问题的利器。本文将介绍Docker的基本概念、优势以及应用场景&#xff0c;帮…...

【C语言】结构体

个人主页点这里~ 结构体 一、结构体类型的声明1、结构的声明2、结构体变量的创建和初始化3、声明时的特殊情况4、自引用 二、结构体内存对齐1、对齐规则2、存在内存对齐的原因3、修改默认对齐数 三、结构体传参四、结构体实现位段 一、结构体类型的声明 我们在指针终篇中提到过…...

Git基础(24):分支回退

文章目录 前言放弃已修改的内容分支回退到指定commit 前言 将分支回退到之前的某个版本 开发中&#xff0c;可能开发某个功能不需要了&#xff0c;或者想要回退到之前历史的某个commit&#xff0c; 放弃后来修改的内容。 放弃已修改的内容 如果未提交&#xff0c;直接使用 …...

复试专业前沿问题问答合集1

复试专业前沿问题问答合集1 人工智能基础知识问答 Q1: 什么是人工智能(AI)? A1: 人工智能(AI)是计算机科学的一个分支,它涉及创建能够执行通常需要人类智能的任务的机器和软件。这些任务包括学习(获取信息并根据信息对其进行规则化以达到结论)、推理(使用规则达到近…...

C++标准库中提供的用于处理正则表达式的类std::regex

std 是 C 标准库的命名空间&#xff0c;包含了大量标准的 C 类、函数和对象。这些类和函数提供了广泛的功能&#xff0c;包括输入输出、容器、算法、字符串处理等。 通常&#xff0c;为了使用标准库中的对象和函数&#xff0c;需在代码中包含相应的头文件&#xff0c;比如 #in…...

.NET Core 服务实现监控可观测性最佳实践

前言 本次实践主要是介绍 .Net Core 服务通过无侵入的方式接入观测云进行全面的可观测。 环境信息 系统环境&#xff1a;Kubernetes编程语言&#xff1a;.NET Core ≥ 2.1日志框架&#xff1a;Serilog探针类型&#xff1a;ddtrace 接入方案 准备工作 DataKit 部署 DataK…...

AI基础知识扫盲

AI基础知识扫盲 AIGCLangchain--LangGraph | 新手入门RAG&#xff08;Retrieval-Augmented Generation&#xff09;检索增强生成fastGPT AIGC AIGC是一种新的人工智能技术&#xff0c;它的全称是Artificial Intelligence Generative Content&#xff0c;即人工智能生成内容。 …...

分布式系统面试全集通第一篇(dubbo+redis+zookeeper----分布式+CAP+BASE+分布式事务+分布式锁)

目录 分布式系统面试全集通第一篇什么是分布式?和微服务的区别什么是分布式分布式与微服务的区别 什么是CAP?为什么不能三者同时拥有分区容错性一致性可用性 Base理论了解吗基本可用软状态最终一致性 什么是分布式事务分布式事务有哪些常见的实现方案?2PC&#xff08;Two Ph…...

Prompt-RAG:在特定领域中应用的革新性无需向量嵌入的RAG技术

论文地址&#xff1a;https://arxiv.org/ftp/arxiv/papers/2401/2401.11246.pdf 原文地址&#xff1a;https://cobusgreyling.medium.com/prompt-rag-98288fb38190 2024 年 3 月 21 日 虽然 Prompt-RAG 确实有其局限性&#xff0c;但在特定情况下它可以有效地替代传统向量嵌入 …...

企业如何利用Taotoken实现多模型API的统一管理与访问控制

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 企业如何利用Taotoken实现多模型API的统一管理与访问控制 在AI应用开发实践中&#xff0c;一个常见且棘手的问题是模型API的管理。…...

现在不掌握AI视频学习底层逻辑,3个月内将被淘汰:基于LinkedIn人才数据的技能贬值倒计时分析

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI视频生成工具学习曲线分析 AI视频生成工具的学习曲线呈现出显著的非线性特征——入门门槛看似平缓&#xff0c;但跨越“可用”到“可控”阶段往往遭遇陡峭的认知断崖。初学者常误以为上传文本提示即可…...

【小红书算法偏爱的文案结构】:ChatGPT无法自学的3层语义嵌套技巧(含2024Q2平台最新流量权重白皮书节选)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;小红书算法偏爱的文案结构本质解构 小红书的推荐算法并非仅依赖关键词或标签匹配&#xff0c;其核心是通过多模态语义理解与用户行为反馈闭环&#xff0c;对文案的信息密度、情绪节奏和结构可读性进行加权评估…...

紧急通知:2024 Q3起甲方招标强制要求提交AI辅助生成声明——ChatGPT项目计划书合规签署指南(含法律效力白皮书)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;AI辅助生成声明的政策背景与合规必要性 近年来&#xff0c;全球主要经济体加速构建人工智能治理框架&#xff0c;AI生成内容&#xff08;AIGC&#xff09;的透明度与可追溯性已成为监管核心关切。欧盟《人工智…...

10分钟搞定Android Studio中文界面:告别英文困扰,让开发效率翻倍提升

10分钟搞定Android Studio中文界面&#xff1a;告别英文困扰&#xff0c;让开发效率翻倍提升 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本&#xff09; 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguag…...

trae之mcp服务初体验 完美实现某视频请求头参数x-ca-sign值逆向

问题提问: 请通过 MCP 服务分析 https://m.yichengwlkj.com/pc?channel=CHANNEL_USK 网站中的 https://api.rrmj.plus/m-station/app/page?position=CHANNEL_USK&pageNum=1&personalRecommend=0 请求链接。该请求的请求头中包含一个名为 x-ca-sign 的参数,该参数的…...

JMeter接口测试从零到实战:新手避坑指南与自动化闭环

1. 为什么接口测试不是“点点点”&#xff0c;而JMeter是多数人绕不开的第一把刀很多人刚接触接口测试时&#xff0c;第一反应是&#xff1a;“不就是用Postman发个请求、看个返回码吗&#xff1f;还要学啥工具&#xff1f;”我带过十几批测试新人&#xff0c;八成在入职前两周…...

3步搞定B站m4s转MP4:开源工具让你的缓存视频重获新生

3步搞定B站m4s转MP4&#xff1a;开源工具让你的缓存视频重获新生 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过这样的烦恼&am…...

渗透测试新手必练的10个靶场:从DVWA到Active的四阶实战路径

1. 为什么这10个靶场不是“随便选的”&#xff0c;而是新手绕不开的实战起点刚入行做渗透测试的朋友&#xff0c;常会陷入一个典型误区&#xff1a;花大量时间看漏洞原理、背命令、刷CTF题&#xff0c;却迟迟不敢碰真实靶机。我带过不少实习生&#xff0c;第一周让他们连上一个…...

如何在Windows上优雅安装安卓应用:APK安装器实用指南

如何在Windows上优雅安装安卓应用&#xff1a;APK安装器实用指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾想过在Windows电脑上直接运行安卓应用&#x…...