CF747C Servers

题目描述

实验室里有 $n$ 台服务器,每台服务器都可以执行任务。每台服务器都有唯一的编号,为 $1$ 到 $n$ 之间的整数。 已知一天中将有 $q$ 个任务到来,第 $i$ 个任务由三个整数描述:$t_{i}$——该任务到达的时刻(单位为秒),$k_{i}$——完成该任务所需服务器的数量,$d_{i}$——完成该任务需要的时间(秒)。所有 $t_{i}$ 互不相同。 要执行第 $i$ 个任务,需在第 $t_{i}$ 秒时有 $k_{i}$ 台空闲服务器。服务器开始执行任务后,在接下来的 $d_{i}$ 秒内都处于忙碌状态。也就是说,它们将在 $t_{i}$、$t_{i}+1$、...、$t_{i}+d_{i}-1$ 这几秒内忙碌。分配服务器时,总是从所有空闲服务器中选择编号最小的 $k_{i}$ 台。如果在 $t_{i}$ 秒没有足够的空闲服务器,则忽略该任务。 请编写程序判断每个任务能否被执行,并输出相应结果。

输入格式

第一行包含两个正整数 $n$ 和 $q$($1 \leq n \leq 100$, $1 \leq q \leq 10^5$),分别表示服务器数量和任务数量。 接下来 $q$ 行每行包含三个整数,第 $i$ 行为 $t_{i}$、$k_{i}$、$d_{i}$($1\leq t_{i} \leq 10^6$, $1\leq k_{i} \leq n$, $1\leq d_{i} \leq 1000$),分别表示第 $i$ 个任务到达的时刻、需要的服务器数量和执行时间。任务按时间顺序给出,且到达时间各不相同。

输出格式

输出 $q$ 行。如果第 $i$ 个任务能被服务器执行,则在第 $i$ 行输出为该任务分配的所有服务器编号之和;否则输出 $-1$。

说明/提示

在第一个样例中,第 $1$ 秒第一个任务到来,将由编号为 $1$、$2$、$3$ 的服务器执行(编号之和为 $6$),忙碌两秒。第 $2$ 秒第二个任务到来,此时只有编号为 $4$ 的服务器空闲,因此任务被忽略。第 $3$ 秒第三个任务到来,此时编号为 $1$、$2$、$3$ 的服务器已经空闲,可以使用 $1$、$2$、$3$、$4$ 号服务器完成任务(编号之和为 $10$)。 在第二个样例中,第 $3$ 秒第一个任务到来,将由 $1$、$2$ 号服务器执行(编号之和为 $3$),忙碌三秒。第 $5$ 秒第二个任务到来,将由服务器 $3$ 执行,因为前两台服务器仍在执行第一个任务。 由 ChatGPT 5 翻译