#5348. 座位预约系统

座位预约系统

题目描述

某电影院有一个座位预约系统,共有 10910^9 个座位,编号为 1110910^9。初始时所有座位都是空闲的。

系统支持以下三种操作:

  1. 预约座位book X - 尝试预约座位 XX。如果该座位空闲则预约成功;如果已被预约则失败。
  2. 取消预约cancel X - 取消座位 XX 的预约。如果该座位已被预约则取消成功;如果本来就空闲则操作无效。
  3. 查询可用座位数量available - 查询当前所有可用(空闲)的座位数量。

你需要编写一个程序,处理一系列操作,并按要求输出结果。

输入格式

第一行一个整数 nn,表示操作的总数。

接下来 nn 行,每行描述一个操作:

  • 预约座位:book X,其中 XX 为座位号。
  • 取消预约:cancel X,其中 XX 为座位号。
  • 查询可用座位数量:available

输出格式

对于每个操作,按以下要求输出:

  1. 对于 book X 操作:

    • 如果预约成功,输出 Seat X booked.
    • 如果预约失败(座位已被预约),输出 Seat X already taken.
  2. 对于 cancel X 操作:

    • 无论该座位之前是否已被预约,都输出 Seat X canceled.
  3. 对于 available 操作:

    • 输出一行:Available seats: k,其中 kk 是当前可用座位的数量。

每个输出占一行。

样例

8
book 5
book 1000000000
book 5
available
cancel 5
book 5
available
book 999999999
Seat 5 booked.
Seat 1000000000 booked.
Seat 5 already taken.
Available seats: 999999998
Seat 5 canceled.
Seat 5 booked.
Available seats: 999999998
Seat 999999999 booked.
6
available
book 1
book 2
available
cancel 1
available
Available seats: 1000000000
Seat 1 booked.
Seat 2 booked.
Available seats: 999999998
Seat 1 canceled.
Available seats: 999999999

样例解释

  • 初始时,可用座位总数为 10910^9
  • 样例 #1 中,依次进行了预约、查询、取消等操作,具体过程如输出所示。
  • 当座位 55 被取消后,重新变为空闲,因此可用座位数恢复。

数据范围与提示

  • 1n1051 \le n \le 10^5
  • 1X1091 \le X \le 10^9
  • 注意 XX 的取值范围较大,不能直接使用数组保存所有座位的状态,需使用高效的查找结构(如哈希表)存储已被预约的座位。