| 比赛 |
进阶指南第0章测试 |
评测结果 |
AAAAAAAAAA |
| 题目名称 |
国旗计划 |
最终得分 |
100 |
| 用户昵称 |
exil |
运行时间 |
2.237 s |
| 代码语言 |
C++ |
内存使用 |
49.04 MiB |
| 提交时间 |
2026-03-14 12:52:28 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define int long long
struct node{
int l,r,hao;
};
node shu[500005];
int f[500005][25];
bool cmp(node a,node b){
return a.l<b.l;
}
int n,m;
void yu(){
int k=1;
for(int i = 1;i<=2*n;i++){
while(k<=2*n && shu[i].r>=shu[k].l)k++;
f[i][0]=k-1;
}
for(int j = 1;j<=20;j++){
for(int i = 1;i<=2*n;i++){
f[i][j]=f[f[i][j-1]][j-1];
}
}
}
int ans[500005];
void solve(int dian){
int now=dian;
int r=0;
for(int i = 20;i>=0;i--){
if(f[now][i]!=0 && shu[f[now][i]].r<shu[dian].l+m){
r+=(1<<i);
now=f[now][i];
}
}
ans[shu[dian].hao]=r+1;
}
signed main(){
freopen("flagplan.in","r",stdin);
freopen("flagplan.out","w",stdout);
cin>>n>>m;
for(int i = 1;i<=n;i++){
int l,r;
cin>>l>>r;
if(r<l)r+=m;
shu[i].l=l;
shu[i].r=r;
shu[i].hao=i;
}
sort(shu+1,shu+1+n,cmp);
for(int i =n+1;i<=2*n;i++){
shu[i].l=shu[i-n].l+m;
shu[i].r=shu[i-n].r+m;
shu[i].hao=shu[i-n].hao;
}
yu();
for(int i = 1;i<=n;i++){
solve(i);
}
for(int i = 1;i<=n;i++){
cout<<ans[i]+1<<" ";
}
return 0;
}