c++0pts代码求调
查看原帖
c++0pts代码求调
772909
Lovely_CCCyh___楼主2023/3/30 21:24
#include<bits/stdc++.h>
using namespace std;
int n,m,ans[5000003],f[5000003][33];
struct node{
	int L,R;
}a[5000003];
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
bool cmp(node x,node y)
{
	return x.L<y.L;
}
void Do()
{
	for(int i=1;i<=2*n;i++)
	{
		int p=i;
		while(p<=2*n&&a[p].L<=a[i].R)
		{
			p++;
		}
		int p1=p-1;
		f[i][0]=p1;
	}
	for(int j=1;j<=19;j++)
	{
		for(int i=1;i<=2*n;i++)
		{
			f[i][j]=f[f[i][j-1]][j-1];
		}
	}
}
void Does(int k)
{
	int t=a[k].L+m,ans1=1,p=k;
	for(int i=19;i>=0;i--)
	{
		if(f[k][i]!=0&&a[f[k][i]].R<t)
		{
			ans1+=(1<<i);
			k=f[k][i];
		}
	}
	printf("%d ",ans1+1);
}
main()
{
	n=read();
	m=read();
	for(int i=1;i<=n;i++)
	{
		a[i].L=read();
		a[i].R=read();
		if(a[i].L>a[i].R)
			a[i].R+=m;
	}
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++)
	{
		a[i+n]=a[i];
		a[i+n].L=a[i+n].L+m;
		a[i+n].R=a[i+n].R+m;
	}
	Do();
	for(int i=1;i<=n;i++)
	{
		Does(i);
	}
	return 0;
}
2023/3/30 21:24
加载中...