0分求救
查看原帖
0分求救
499231
Jacky2009楼主2022/3/19 15:53
#include<bits/stdc++.h>
using namespace std;
int next[100005][64];
int li[100005],lg[100005];
int n,m,k;
void jump(int i,int m){
	int tmp=i;
	while(m>1){
		int l=lg[m];
	//	cout<<l<<" ";
		tmp=next[tmp][l];
		m-=l;
	}
//	cout<<endl;
	if(m)tmp=next[tmp][1];
	cout<<tmp<<" ";
}
int main(){
    cin>>n>>k>>m;
	for(int i=1;i<=n;i++)cin>>li[i];
	for(int i=1;i<=n;i++)next[i][0]=1;
	lg[1]=0;
	for(int i=2;i<=n;i++)lg[i]=lg[i/2]+1;
//	cout<<lg[4]<<" "<<lg[2]<<endl;
	int l=1,r=k+1;
	for(int i=1;i<=n;i++){
			while(r+1<=n&&li[r+1]-li[i]<li[i]-li[l])l++,r++;
			if(li[r+1]-li[i]>li[i]-li[l])next[i][1]=r;
			else next[i][1]=l;
	}	
	for(int i=2;i<=64;i++){
		for(int j=1;j<=n;j++)next[j][i]=next[next[j][i-1]][i-1];
	}
	for(int i=1;i<=n;i++)jump(i,m);
}
2022/3/19 15:53
加载中...