#include<iostream>
#include<algorithm>
using namespace std;
#define MAX 400005
struct p{int l,r,num;}a[MAX];
int jump[MAX][17],ans[MAX],tmp,n,m,top,l,r,now,to;
bool cmp(p a,p b){
return a.l<b.l;
}
int main(){
cin>>n>>m;
a[0]=p{0x7fffffff,0x7fffffff,0x7fffffff};
for(int i=1;i<=n;i++){
cin>>l>>r;
if(r<l)r+=m;
a[++top]=p{l,r,i};
a[++top]=p{l+m,r+m,0};
}
sort(a+1,a+2*n+1,cmp);
for(int i=1,xibo=1;i<=2*n;i++){
while(a[xibo].l<=a[i].r&&xibo<=2*n)xibo++;
jump[i][0]=xibo-1;
}
for(int j=1;j<=16;j++)for(int i=1;i<=2*n;i++)jump[i][j]=jump[jump[i][j-1]][j-1];
for(int i=1;i<=2*n;i++){
if(a[i].num){
tmp=0,now=i;
for(int j=16;j>=0;j--)if(jump[now][j]&&a[jump[now][j]].r<a[i].l+m)now=jump[now][j],tmp+=(1<<j);
ans[a[i].num]=tmp+2;
}
}
for(int i=1;i<=n;i++)cout<<ans[i]<<" ";
}
Flag Program
Guess you like
Origin www.cnblogs.com/SZJZC/p/11543751.html
Recommended
Ranking