建议降绿或者黄
查看原帖
建议降绿或者黄
555825
block_in_mc楼主2024/9/12 18:04

显然的贪心,也不难用优先队列维护。并且其实属于廊桥分配的一部分。

我的代码:

#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
int n, cnt, id[50010];
struct node { int l, r, id, vl; } a[50010];
priority_queue<pii, vector<pii>, greater<pii> > q;
bool cmp1(node n1, node n2) { return n1.l < n2.l; }
bool cmp2(node n1, node n2) { return n1.id < n2.id; }
int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
		scanf("%d%d", &a[i].l, &a[i].r), a[i].id = i;
	sort(a + 1, a + n + 1, cmp1);
	for (int i = 1; i <= n; i++) {
		if (q.empty() || a[i].l <= q.top().first) a[i].vl = ++cnt;
		else a[i].vl = q.top().second, q.pop();
		q.push({a[i].r, a[i].vl});
	}
	sort(a + 1, a + n + 1, cmp2);
	printf("%d\n", cnt);
	for (int i = 1; i <= n; i++)
		printf("%d\n", a[i].vl);
	return 0;
}
2024/9/12 18:04
加载中...