CF644B 题解
思路
按照题目说的做就行。
对于每一个新进来的请求,先把完成时间比任务开始时间靠前的任务从队列里弹掉,然后判断队列里任务个数是否 (是 不是 ,因为我们已经把正在工作的任务也放在队列里了),如果是,那就把结束时间累加上 并塞进队列。注意要考虑上一个结束时间还不及这个任务开始时间的情况。
代码
# include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
int n, m;
ll now, a, b;
queue <ll> q;
int main () {
ios::sync_with_stdio (0);
cin.tie (0);
cout.tie (0);
cin >> n >> m;
while (n --) {
cin >> a >> b;
while (! q.empty () && q.front () <= a)
q.pop ();
now = max (now, a);
if (q.size () <= m)
q.push (now += b), cout << now << ' ';
else
cout << "-1 ";
}
return 0;
}

浙公网安备 33010602011771号