CF644B 题解

思路

按照题目说的做就行。

对于每一个新进来的请求,先把完成时间比任务开始时间靠前的任务从队列里弹掉,然后判断队列里任务个数是否 ti\le t_i(是 \le 不是 <<,因为我们已经把正在工作的任务也放在队列里了),如果是,那就把结束时间累加上 did_i 并塞进队列。注意要考虑上一个结束时间还不及这个任务开始时间的情况。

代码

# 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;
}
posted @ 2024-05-24 15:35  Vitamin_B  阅读(4)  评论(0)    收藏  举报  来源