我们有 M
台服务器(编号 1..M
),N
个任务(编号 1..N
)。第 i
个任务给出启动时间 s_i
与执行时间 t_i
,不同任务的启动时间两两不同。任务按启动时间发生:
当某任务到来时,所有在该时刻之前或恰好完成的任务会释放其服务器;若有空闲服务器,则该任务立刻占用编号最小的空闲服务器并执行。要求输出编号为 K
的任务在执行时占用的服务器编号。
核心算法:事件模拟 + 两个小根堆(优先队列)
s_i
升序排序,同时保留任务原编号 i
。数据中心有 M 个服务器(编号 1−M ),现在 N 个(编号 1−N )需要执行,当一个任务开始执行时,会独占编号最小的空闲服务器,执行完后会立即释放该服多器。任务按照启动时间的先后顺序执行(所有任务的启动时间都不相同)。请返回编号为 K 的任务执行时占用的服务器编号。
第一行是用空格分隔的三个整数:M,N,K 分别代表服务器个数,任务数,需要查询的任务编号, 1<=K<=N<=M<=104
接下来 N 行是编号 1−N 的任务信息,每行是用空格分隔的两个整数,分别代表任务的启动时间,执行需要的时间。1<= 启动时间,执行时间 <=105
编号为 K 的任务执行时占用的服务器编号
输入
4 3 2
1 2
4 6
3 3
输出
2
说明
编号为 1 的任务(启动时间为 1 )占用 1 号服务器
编号为 3 的任务(启动时间为 3 )执行时,编号为 1 的任务已经执行完,1 号服务器空闲,所以占用 1 号服务器
编号为 2 的任务(启动时间为 4 )执行时,编号为 3 的任务还没有执行完,所以占用 2 号服务器
输入
2 1 1
1 5
输出
1
说明
只有 1 个任务,占用 1 号服务器