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

题解:洛谷 P2161 [SHOI2009] 会场预约

【题目来源】

洛谷:[P2161 SHOI2009] 会场预约 - 洛谷

【题目描述】

PP 大厦有一间空的礼堂,可以为企业或者单位提供会议场地。

这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突。也就是说,前一个会议的结束日期必须在后一个会议的开始日期之前。所以,如果要接受一个新的场地预约申请,就必须拒绝掉与这个申请相冲突的预约。

一般来说,如果 PP 大厦方面事先已经接受了一个会场预约(例如从 \(10\) 日到 \(15\) 日),就不会再接受与之相冲突的预约(例如从 \(12\) 日到 \(17\) 日)。

不过,有时出于经济利益,PP 大厦方面有时会为了接受一个新的会场预约,而拒绝掉一个甚至几个之前预订的预约。 于是,礼堂管理员 QQ 的笔记本上经常记录着这样的信息:(本题中为方便起见,所有的日期都用一个整数表示)例如,如果一个为期 \(10\) 天的会议从 \(90\) 日开始到 \(99\) 日,那么下一个会议最早只能在 \(100\) 日开始。(此处前后矛盾,若无法理解请参考形式化描述。)

最近,这个业务的工作量与日俱增,礼堂的管理员 QQ 希望参加 SHTSC 的你替他设计一套计算机系统,方便他的工作。这个系统应当能执行下面两个操作:

A 操作:有一个新的预约是从 \(start\) 日到 \(end\) 日,并且拒绝掉所有与它相冲突的预约。执行这个操作的时候,你的系统应当返回为了这个新预约而拒绝掉的预约个数,以方便 QQ 与自己的记录相校对。

B 操作:请你的系统返回当前的仍然有效的预约的总数。

形式化题意:

你需要维护一个在数轴上的线段的集合 \(S\),支持两种操作:

A l r 表示将 \(S\) 中所有与线段 \([l,r]\) 相交的线段删去,并将 \([l,r]\) 加入 \(S\) 中。

B 查询 \(S\) 中的元素数量。

对于 A 操作,每次还需输出删掉的元素个数。

【输入】

第一行一个正整数 \(n\),表示操作个数。
接下来 \(n\) 行,每行表示一个操作,都是上面两种中的一个。

【输出】

输出 \(n\) 行,每行一个整数,表示对应操作的答案。

【输入样例】

6
A 10 15
A 17 19
A 12 17
A 90 99
A 11 12
B

【输出样例】

0
0
2
0
1
2

【算法标签】

《洛谷 P2161 会场预约》 #平衡树# #树状数组# #各省省选# #2009# #上海#

【代码详解】

#include <bits/stdc++.h>
using namespace std;const int N = 200005;  // 最大数组大小int n;                 // 操作次数
int tr[N];             // 树状数组,用于统计区间覆盖
int ed[N];             // ed[i]:记录以i为左端点的区间的右端点
int tot;               // 当前存在的区间总数/*** 计算lowbit:获取x的最低位的1* @param x 输入数值* @return x的最低位的1所代表的值*/
int lowbit(int x)
{return x & -x;  // 利用补码性质
}/*** 树状数组单点更新操作* @param x 更新位置* @param c 增加的值*/
void add(int x, int c)
{// 树状数组标准更新操作,向上更新所有相关节点for (int i = x; i <= 100000; i += lowbit(i))tr[i] += c;
}/*** 树状数组前缀和查询操作* @param x 查询位置* @return 前x个位置的和*/
int query(int x)
{int res = 0;// 树状数组标准查询操作,向下累加所有相关节点for (int i = x; i; i -= lowbit(i))res += tr[i];return res;
}int main()
{// 输入操作次数cin >> n;// 处理n个操作for (int i = 1; i <= n; i++){char c;cin >> c;  // 读入操作类型if (c == 'A')  // 添加区间操作{int L, R, cnt = 0;  // L,R: 区间端点, cnt: 被删除的区间数量cin >> L >> R;// 循环删除所有与新区间重叠的区间while (1){int l = 0, r = R;  // 二分查找边界 [0, R]int ans;            // 存储二分查找结果// 二分查找:找到最小的位置ans,使得query(ans) == query(R)// 这意味着区间[ans, R]内没有区间覆盖while (l <= r){int mid = (l + r) >> 1;  // 计算中点if (query(mid) >= query(R)){ans = mid;      // 记录当前位置r = mid - 1;    // 继续向左查找更小的满足条件的位置}else {l = mid + 1;    // 向右查找}}// 检查找到的区间是否与新区间重叠if (ed[ans] >= L)  // 如果区间[ans, ed[ans]]与[L,R]重叠{add(ans, -1);  // 从树状数组中删除该区间cnt++;          // 被删除区间计数加1tot--;          // 总区间数减1}else{break;  // 没有重叠区间,退出循环}}// 输出被删除的区间数量cout << cnt << endl;// 添加新区间add(L, 1);    // 在树状数组中标记新区间ed[L] = R;    // 记录新区间的右端点tot++;         // 总区间数加1}else  // 查询操作:输出当前区间总数{cout << tot << endl;}}return 0;
}

【运行结果】

6
A 10 15
0
A 17 19
0
A 12 17
2
A 90 99
0
A 11 12
1
B
2
http://www.jsqmd.com/news/394586/

相关文章:

  • 书籍-阿尔伯特·赫尔曼《亚洲古代地理学》
  • IndicEval A Bilingual Indian Educational Evaluation Framework for Large Language Models
  • 2026年上海有实力的宠物口腔医生口碑推荐榜,猫咪牙科/牙科专科/狗狗洗牙/狗口腔溃疡诊疗,宠物口腔医生性价比高的推荐 - 品牌推荐师
  • MultiCW A Large-Scale Balanced Benchmark Dataset for Training Robust Check-Worthiness Detection Mode
  • 题解:洛谷 P3368 【模板】树状数组 2
  • 2026年安徽评价好的家教机构选哪家,大学生家教/小学家教/全托一对一/全托补习班/师范家教/家教,家教机构电话 - 品牌推荐师
  • 题解:洛谷 P3374 【模板】树状数组 1
  • 题解:洛谷 P2085 最小函数值
  • 实用指南:FreeRTOS信号量
  • 看完就会:AI论文写作软件 千笔·专业学术智能体 VS 文途AI,MBA专属神器!
  • 日程邀请类钓鱼邮件攻击深度技术解读与防范
  • 宿主系统产品定义
  • 毕业论文神器 8个AI论文写作软件测评:本科生高效写作与格式规范全攻略
  • 省心了! 降AI率网站 千笔AI VS speedai,本科生专属降重神器!
  • 照着用就行:更贴合MBA需求的AI论文软件,千笔ai写作 VS 笔捷Ai
  • 题解:洛谷 P1801 黑匣子
  • YOLO26涨点改进| AAAI 2025 | 独家首发,细节涨点改进 | 引入SADecoder尺寸感知解码器模块,了解决解码器的尺度单一性问题,识别不同尺寸目标,适用于目标检测,图像分割,图像增强
  • 直接上结论:9个AI论文网站测评!MBA毕业论文写作必备工具推荐
  • 题解:AcWing 849 Dijkstra求最短路I
  • 动态窗口算法(DWA):让机器人在迷宫中优雅前行
  • 题解:洛谷 P3378 【模板】堆
  • 生产环境用Claude Code构建AI内容创作工作流:从灵感到发布的自动化实践最佳实践与性能优化
  • 揭秘2026年航空撤离舱实力厂家,助您明智选择,靠谱的撤离舱实力厂家推荐技术领航者深度解析 - 品牌推荐师
  • 2026汽车微动开关品牌优选榜单,这些品牌值得拥有,微动开关/鼠标微动开关/小型微动开关,汽车微动开关优质厂家口碑推荐 - 品牌推荐师
  • 了解2026欧曼增压器直销厂家口碑排行,选厂不迷茫,旁通阀压力表/潍柴p10H.5增压器,增压器组件推荐排行榜单 - 品牌推荐师
  • 2026年青少年心理辅导新观察:注重口碑与专业度的机构,叛逆期教育/问题青少年/青少年厌学,青少年心理辅导中心排行 - 品牌推荐师
  • 国版“OpenClaw” 网易有道 LobsterAI宣布开源:激活Agent创新生态
  • Log4j
  • 题解:AcWing 846 树的重心
  • 自感注册权:非存在论的存在之守护