比赛 |
20251001国庆欢乐赛1 |
评测结果 |
AWAAAAAAAA |
题目名称 |
国旗计划 |
最终得分 |
90 |
用户昵称 |
郑霁桓 |
运行时间 |
1.245 s |
代码语言 |
C++ |
内存使用 |
42.80 MiB |
提交时间 |
2025-10-01 10:15:39 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long n,m,t,nt[25][400005],as[200005],ii,nn;
struct nm{
long long l,r,id;
}a[400005];
bool cc(nm xx,nm yy){
if(xx.r==yy.r) return xx.l<yy.l;
return xx.r<yy.r;
}
int main(){
freopen("flagplan.in","r",stdin);
freopen("flagplan.out","w",stdout);
ios::sync_with_stdio(false);
cin>>n>>m,nn=n;
for(int i=1;i<=n;i++){
cin>>a[i].l>>a[i].r,a[i].id=i;
if(a[i].r<a[i].l) a[i].r+=m;
else t++,a[n+t]={a[i].l+m,a[i].r+m,n+t};
}
n+=t;
sort(a+1,a+n+1,cc),a[n+1].l=m*4;
for(int i=1,j=1;i<=n;i++){
while(j+1<=n&&a[j+1].l<=a[i].r) j++;
if(i!=j) nt[0][i]=j;
}
for(int i=1;i<=20;i++){
for(int j=1;j<=n;j++){
nt[i][j]=nt[i-1][nt[i-1][j]];
}
}
for(int i=1;i<=n;i++){
if(a[i].l>m) continue;
ii=i;
for(int j=20;j>=0;j--){
if(nt[j][ii]&&a[nt[j][ii]].r<a[i].l+m) ii=nt[j][ii],as[a[i].id]+=(1<<j);
}
if(a[ii].r<a[i].l+m) as[a[i].id]++;
}
for(int i=1;i<=nn;i++) cout<<as[i]+1<<" ";
return 0;
}