0分求助
查看原帖
0分求助
499231
Jacky2009楼主2023/1/11 18:55
#include<bits/stdc++.h>
using namespace std;
#define int long long
pair<int,int>li[400005];
int n,m,k,x,y,z;
int lis[400005][26],p;
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>li[i].first>>li[i].second;
		if(li[i].second<li[i].first)li[i].second+=m;
	}
	int cnt=n;
	sort(li+1,li+n+1);
	for(int i=1;i<=n;i++){
			cnt++;
			li[i+n].first=li[i].first+m;
			li[i+n].second=li[i].second+m;
		
	}
	p=1;
	for(int i=1;i<=2*n;i++){
		while(li[p].first<=li[i].second&&p<=2*n)p++;
		lis[i][0]=p-1;
		p--;
	}
	for(int i=1;i<=24;i++){
		for(int j=1;j<=2*n;j++){
			if(lis[j][i-1])lis[j][i]=lis[lis[j][i-1]][i-1];
			//cout<<lis[j][i]<<" ";
		}
	//	cout<<endl;
	}
	int ans=0;
	for(int i=1;i<=n;i++){
		int x=i;
		ans=1ll;
		int end=li[i].first+m;
		for(int j=24;j>=0;j--){
			if(lis[x][j]&&li[lis[x][j]].second-li[i].first<m){
				x=lis[x][j];
				ans+=(1<<j);
			}
		}
		cout<<(ans+1ll)<<" ";
	}
}

```cpp
2023/1/11 18:55
加载中...