比赛 |
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;
}