#W1018. CPU 调度

CPU 调度

题目背景

众所周知 2025 CACC 区域赛的工程题非常的 ex,贴心的出题人为大家准备了简单版

题目描述

给定 NN 个任务,每个任务由四个参数组成:任务 ID、到达时间、执行所需时长 以及 优先级。

系统采用单核 CPU 抢占式调度策略,规则如下:

  1. CPU 总是执行已经到达且优先级最高的任务
  2. 如果优先级相同,那么优先执行到达时间最早的的任务
  3. 新任务到达,如果优先级高于当前任务,则发生抢占(当前任务暂停,记录剩余时间)

请计算并输出每个任务完成的时间点。

输入格式

第一行一个正整数 NN (1N1051 \leq N \leq 10^5),代表任务总数。 接下来的 NN 行,每行包含四个整数 idi,Si,Ti,Piid_i, S_i, T_i, P_i,用空格隔开。

数据范围满足:

  • 1idi1091 \leq id_i \leq 10^9
  • 1Si,Ti1091 \leq S_i, T_i \leq 10^9
  • 1Pi1091 \leq P_i \leq 10^9
  • 保证所有任务的 idid 互不相同。

输出格式

输出共 NN 行。每行两个整数,分别为任务的 idid 和它的完成时间,按照任务完成时间的先后顺序升序输出。

样例

3
1 1 5 10
2 2 2 20
3 10 2 5
2 4
1 8
3 12

样例解释

  1. t=1t=1:任务 1 到达,开始执行。
  2. t=2t=2:任务 2 到达,优先级 20 > 10,抢占 CPU。任务 1 剩余时长 4。
  3. t=4t=4:任务 2 完成。CPU 恢复执行任务 1。
  4. t=8t=8:任务 1 完成。
  5. t=10t=10:任务 3 到达,开始执行。
  6. t=12t=12:任务 3 完成。