会议室预约系统优化(蓝桥杯)

文章目录

  • 会议室预约系统优化
    • 问题描述
    • 差分

会议室预约系统优化

问题描述

假设你是一家大型企业的 IT 工程师,企业内有

n 个会议室,每天都有多个部门预约会议室进行会议。你的任务是优化现有的会议室预约系统。

你需要设计一个程序来支持以下两种操作:

  1. 预约会议室: 给定一个时间范围 [start,end] 和一个会议室的 ID ,预约该会议室在这个时间范围内。
  2. 查询会议室状态: 给定一个时间点 t 和一个会议室的 ID,返回该会议室在时间点 t 的预约状态,即在这个时间点,该会议室正在被预约多少次。

输入格式
第一行包含一个整数 n,表示会议室的数量。

第二行包含一个整数 q,表示操作的数量。

接下来 q 行,每行描述一个操作。

如果是预约操作,则格式为:BOOK starttime endtime roomid。

如果是查询操作,则格式为:QUERY t roomid。

输出格式
对于每一个 QUERY 操作,输出一个整数,表示到时间点 t 为止,该会议室被预约了多少次。

样例输入

3
5
BOOK 10 20 0
BOOK 15 25 1
BOOK 20 30 0
QUERY 15 0
QUERY 25 1

样例输出

1
0

这里蓝桥官方给的样例好像是错的,应该为:

1
1

评测数据范围
1≤n≤105,1≤q≤105 ,0≤starttime<endtime≤109 , 0≤t≤109

差分

#include<bits/stdc++.h>
using namespace std;int main()
{int n,q; // n是会议室的数量,q是操作的数量。scanf("%d %d",&n,&q); // 读取n和q的值。vector<map<int,int>> a(n); // 创建一个向量a,包含n个map,每个map用于存储每个会议室的预约开始时间和结束时间的差分。while(q--) // 遍历q次操作。{string s;cin>>s; // 读取操作的类型,BOOK或QUERY。if(s=="BOOK"){int l,r,id; // l为预约开始时间,r为预约结束时间,id为会议室的ID。scanf("%d %d %d",&l,&r,&id); // 读取这三个值。a[id][l]+=1; // 在预约开始时间,增加一个预约。a[id][r+1]-=1; // 在预约结束时间的下一时刻,减少一个预约。}else{int t,id; // t是查询的时间点,id是会议室的ID。scanf("%d %d",&t,&id); // 读取这两个值。int cnt=0; // cnt用于统计到时间点t,该会议室的预约总次数。for(auto i : a[id]) // 遍历id会议室的所有预约记录。{if(i.first > t) break; // 如果记录的时间点大于查询时间点t,则结束循环。cnt += i.second; // 累加每个有效时间点的预约差分值。}printf("%d\n",cnt); // 输出到时间点t,会议室id的预约总次数。}}return 0;
}

这个代码使用了一种称作"差分数组"的技术来高效管理会议室预约的增加和减少。通过在预约开始时增加计数,在预约结束后的下一时刻减少计数,这样就可以通过累加到任何给定时间点的差分值来计算该时间点的总预约次数。这种方法的优点是更新预约状态的操作时间复杂度为O(1),查询操作的时间复杂度为O(m),其中m是对应会议室的预约记录条数,这在大多数情况下要优于直接遍历每个预约记录来计算总预约次数。

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

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

相关文章

Web3社交项目UXLINK零撸教程

简介&#xff1a;UXLINK是Web3行业中首个主打双向、熟人社交关系的产品&#xff0c;与其他社交基础设施类项目相比&#xff0c;类似Twitter Vs Facebook、微博 Vs 微信的社交结构区别。UXLINK的愿景&#xff1a;1、社交中心&#xff1a;成为最大的社交平台&#xff0c;专注于真…

goctl-swagger 生成json接口文件

参考&#xff1a; GitHub - dyntrait/goctl-swagger: 通过 api 文件生成 swagger 文档 GitHub - Bluettipower/goctl-swagger 一:编译 执行go install 前一般需要设置环境&#xff0c;不然资源经常会下载不下载 go env -w GOPROXYhttps://goproxy.cn,direct 执行完 go in…

C++/CLI学习笔记4(快速打通c++与c#相互调用的桥梁)

3.4声明多个变量 同一个语句可声明同类型的多个变量&#xff0c;用逗号分隔即可&#xff0c;如下所示:int x 10, y, z 11; 该语句声明int变量x,y和z。第一个初始化为10&#xff0c;第二个未初始化&#xff0c;第三个初始化为11。 3.5变量赋值 使用赋值操作符(等号)向变量…

IO流(主要是记住四大类InputStream,OutputStream、Reader和Writer,其他都是他们的子类)

IO流 1、文件 &#xff08;1&#xff09;文件概念 文件就是保存数据的地方。例如word文档&#xff0c;txt文件&#xff0c;execl文件等等。 &#xff08;2&#xff09;文件流 文件在程序中是以流的形式来操作的。 流&#xff1a;数据在数据源&#xff08;文件&#xff09;…

【Python】Python中的正则表达式

Python中的正则表达式 1.re模块使用入门 1.1 re.match 函数 函数定义&#xff1a; re.match 尝试从字符串的起始位置匹配一个模式&#xff0c;如果不是起始位置匹配成功的话&#xff0c;match() 就返回 none。 函数语法&#xff1a; re.match(pattern, string, flags0) …

ASR语音识别纠错-fast correct

1、使用方式说明 ASR对应的文本越长&#xff0c;识别准确率和召回率越高 识别的错误分类&#xff1a; 编号错误类型示例1谐音字词配副眼睛-配副眼镜2混淆音字词流浪织女-牛郎织女3多字错误关关机-关机4少字错误 爱有天意-假如爱有天意 5形似字错误高梁-高粱6中文拼音全拼xin…

二叉树【Java】

二叉树遍历 前序遍历 中序遍历 后续遍历 代码 前 中 后序遍历 package Trww;public class TreeTraversal {/*12 34 5 6*/public static void main(String[] args) {TreeNode tree new TreeNode(new TreeNode(new TreeNode(4),2,null),1,new TreeNode(new TreeNode(5),3,n…

Lua使用三目运算符取值

按照三目运算符的规则&#xff0c;lua的三目运算符可以写成&#xff1a;a and b or c b为false时&#xff0c;三目运算符是无效的。 提示&#xff1a;0在lua里也是真&#xff0c;condition and 0 or 1 这句代码没问题 如果你确认b为真&#xff0c;那么就用a and b or c&…

maven私服搭建详细教程

1、为什么需要私服 如果在公司中多个项目模块中的的公共类用的都是一样的&#xff0c;那么不可能将这些一样的代码写两遍。所以将其中一个项目中的代码打包成私服&#xff0c;然后在另外一个模块中去进行引用。 除此之外&#xff0c;如果大公司中开发人员较多&#xff0c;大家同…

什么是多模态学习?

1、定义与概念 多模态学习是一种机器学习方法&#xff0c;它利用多种不同的数据模态来训练模型&#xff0c;这些模态可能包括文本、图像、音频、视频等。多模态AI技术融合了多种数据模式&#xff0c;如文本、图片、视频和音频&#xff0c;以提供对场景的更透彻理解。这种技术的…

《ElementPlus 与 ElementUI 差异集合》icon 图标使用(包含:el-button,el-input和el-dropdown 差异对比)

安装 注意 ElementPlus 的 Icon 图标 要额外安装插件 element-plus/icons-vue. npm install element-plus/icons-vue注册 全局注册 定义一个文件 element-icon.js &#xff0c;注意代码第 6 行。加上了前缀 ElIcon &#xff0c;避免组件命名重复&#xff0c;且易于理解为 e…

Java开发从入门到精通(七):Java的面向对象编程OOP:常用API

Java大数据开发和安全开发 &#xff08;一&#xff09;Java的常用API1.1 Object类1.1 toString1.1 equals方法1.1 对象克隆clone1.1 Objects类1.1 包装类1.1 StringBuilder1.1 StringBuffer1.1 StringJoiner1.1 Math、System、Runtime1.1 BigDecimal1.1 传统时间&#xff1a;Da…

TinTin Web3 动态精选:以太坊坎昆升级利好 Layer2,比特币减半进入倒计时

TinTin 快讯由 TinTinLand 开发者技术社区打造&#xff0c;旨在为开发者提供最新的 Web3 新闻、市场时讯和技术更新。TinTin 快讯将以周为单位&#xff0c; 汇集当周内的行业热点并以快讯的形式排列成文。掌握一手的技术资讯和市场动态&#xff0c;将有助于 TinTinLand 社区的开…

【每日力扣】235. 二叉搜索树的最近公共祖先与39. 组合总和问题描述

&#x1f525; 个人主页: 黑洞晓威 &#x1f600;你不必等到非常厉害&#xff0c;才敢开始&#xff0c;你需要开始&#xff0c;才会变的非常厉害。 235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义…

硬件工程师入门基础知识(零)心法篇

硬件工程师入门基础知识(零)心法篇 1.为什么要当硬件工程师?2.什么是硬件工程师?3.怎么成为合格的硬件工程师?4.优秀的硬件工程师需要具备什么技能和品质?5.硬件工程师的成长路径?6.硬件工程师还有哪些职业可能?1.为什么要当硬件工程师? 很多快要毕业或者刚毕业的同学…

int与integer的区别

int和integer都是用来表示整数的数据类型&#xff0c;但有一些细微的区别。 int是Java中的基本数据类型&#xff0c;它可以存储整数值。int类型在内存中占4个字节&#xff0c;范围为-2,147,483,648到2,147,483,647。int类型使用最频繁&#xff0c;因为它的存储空间较小&#x…

【2024年5月备考新增】《软考真题分章练习 - 5 项目进度管理(高项)》

1、( ) is a technique for estimating the duration or cost of an activity or a project using historical data from a similar activity or project. A.Analogous estimating B. parametric estimating C.Three-Point estimating D. Bottom estimating 2、下图中(单位:…

如何本地搭建hMailServer邮件服务

文章目录 前言1. 安装hMailServer2. 设置hMailServer3. 客户端安装添加账号4. 测试发送邮件5. 安装cpolar6. 创建公网地址7. 测试远程发送邮件8. 固定连接公网地址9. 测试固定远程地址发送邮件 前言 hMailServer 是一个邮件服务器,通过它我们可以搭建自己的邮件服务,通过cpola…

Android中使用intent可以传递哪些类型的数据?

Intent可以传递的数据类型基本上分为四种; (1)基本数据类型(包括int,char,string等类型的数据); //传递String intent.putExtra("key_str","传递简单基础的数据");//获取 str = intent.getStringExtra("key_str"); (2)Bundle类型 …

C语言——预处理

宏定义 作用进行文本替换 #define 文本1 替换为 #define a 5 取消宏定义 #undef 取消宏定义 #define a 5 printf ("%d" ,a); #undef a printf ("%d" ,a);//在调用宏a时将报错 文件预处理 #include<>//现在系统目录中找&#x…