为什么MLE!!!!
查看原帖
为什么MLE!!!!
1328520
qizhonglei楼主2024/12/1 15:38

这边的话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;
}
2024/12/1 15:38
加载中...