比赛 20251001国庆欢乐赛1 评测结果 RRRRRRRRRR
题目名称 国旗计划 最终得分 0
用户昵称 对立猫猫对立 运行时间 8.453 s
代码语言 C++ 内存使用 10.11 MiB
提交时间 2025-10-01 10:16:10
显示代码纯文本
#include <bits/stdc++.h>
//#define int long long
#define fora(i, a, b, c) for(int i = a; i <= b; i += c)
#define forb(i, a, b, c) for(int i = a; i >= b; i -= c)
using namespace std;
int n, m, ansl[200005];
struct Node {
	int id, l, r, nxt = 0;
	bool operator<(Node a) {
		return l < a.l;
	}
} s[400005];
bool cmp(Node a, Node b) {
	return a.id < b.id;
}
void search(int idx) {
	int tail = s[idx].r, ans = 1, limit = s[idx].l + m;
	int i = idx;
	while (tail < limit) {
		if(s[i].nxt) i = s[i].nxt;
		else {
			int t = i;
			while (s[i].l <= tail) i++;
			if (s[i].l > tail) i--;
			s[t].nxt = i;
		}
		ans++;
		tail = s[i].r;
	}
	ansl[s[idx].id] = ans;
	return;
}
signed main() {
	freopen("flagplan.in", "r", stdin);
	freopen("flagplan.ans", "w", stdout);
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);
	cin >> n >> m;
	fora(i, 1, n, 1) {
		cin >> s[i].l >> s[i].r;
		if (s[i].r < s[i].l)
			s[i].r += m;
		s[i].id = i;
	}
	sort(s + 1, s + n + 1);
	fora(i, 1, n, 1) {
		s[n + i] = s[i];
		s[n + i].l = s[i].l + m;
		s[n + i].r = s[i].r + m;
	}
	fora(i, 1, n, 1) {
		search(i);
	}
	fora(i, 1, n, 1) {
		cout << ansl[i] << " ";
	}
	cout << endl;
	return 0;
}