这边的话1e6*61的数组开不下的吗? 我就很神奇为什么他会74MLE
#include<bits/stdc++.h>
using namespace std;
int n,k;
long long m,pos[1000001];
int f[1000001][64];
int pos2(int start){
int now=start,a=0;
long long b=m;
while(b){
if(b&1)
now=f[now][a];
a++;
b>>=1;
}
return now;
}
int main(){
scanf("%d%d%lld",&n,&k,&m);
for(int i=1;i<=n;i++)
scanf("%lld",&pos[i]);
f[1][0]=k+1;
int l=1,r=k+1;
for(int i=2;i<=n;i++){
while(r<n&&pos[r+1]-pos[i]<pos[i]-pos[l])
l++,r++;
f[i][0]=(pos[r]-pos[i]>pos[i]-pos[l]?r:l);
}
for(int j=1;j<=log2(m);j++)
for(int i=1;i<=n;i++)
f[i][j]=f[f[i][j-1]][j-1];
for(int i=1;i<=n;i++)
printf("%d ",pos2(i));
return 0;
}