AT_scpc2026_div1_a CUBRID HA Load Balance
题目描述
#### 表示语言
CUBRID HA 集群是一个由 $N$ 台服务器组成的系统,服务器编号从 $1$ 到 $N$。
Jank 成为了 SCSC 的服务器管理员,他需要从这个 CUBRID HA 集群中选择一些服务器来使用。Jank 会将他选择的服务器开启,没有选择的服务器则保持关闭状态。
在开启服务器时,Jank 会为每台被选中的服务器指定角色:可以设置为 Master 或 Slave。Master 服务器可以处理 RW 请求和 RO 请求,Slave 服务器可以处理 RO 请求和 SO 请求。每台服务器同一时刻最多只能处理一个请求。
如果当前开启的服务器中没有 Master 服务器,并且至少有一台 Slave 服务器被开启,那么编号最小的已开启 Slave 服务器会立即变为 Master 服务器。
Jank 需要顺序处理 $Q$ 个如下两种类型的操作:
- `1 i`:关闭编号为 $i$ 的服务器。如果该服务器已经关闭,则忽略该操作。
- `2 a b c`:同时到达 $a$ 个 RW 请求,$b$ 个 RO 请求和 $c$ 个 SO 请求。
对于每一个类型为 $2$ 的操作,到达的所有请求必须全部使用当前已开启的服务器来处理。每个请求都要分配给能够处理该类别请求的服务器,并且每台服务器同一时刻最多只能分配到一个请求。未被分配的请求无法被处理。
当所有请求被分配后,每台服务器各自处理一个分配到的请求,然后该请求被丢弃。空闲下来的服务器可以重新用于处理下一批请求。
请你求出 Jank 最初至少要选择多少台服务器,才能完成所有的请求处理。如果不存在任何一种选择办法能够完成所有请求,输出 $-1$。
输入格式
从标准输入读入,格式如下:
> $N$ $Q$
> $\mathrm{query}_1$
> $\mathrm{query}_2$
> $\vdots$
> $\mathrm{query}_Q$
每一条操作有如下两种格式:
> 1 $i$
> 2 $a$ $b$ $c$
输出格式
输出 Jank 最初至少要选择的服务器数量,以确保所有请求都能被处理。如果无解,输出 $-1$。
说明/提示
### 限制条件
- $1 \leq N,Q \leq 2000$
- $1 \leq i \leq N$
- $0 \leq a,b,c \leq N$
- 至少有一条类型为 $2$ 的操作。
- 所有输入数值均为整数。
由 ChatGPT 5 翻译