cjb-poi2010frog

从 Trac 迁移的文章

这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。

原文章内容如下:

{{{
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <vector>
#include <map>
#include <set>
#include <cmath>
#include <stack>
#include <cassert>
#define pb push_back
#define mp make_pair
#define rep(i,n) for(int i=1;i<=n;i++)
using namespace std;
#define N 1000010
int n,k;
long long m;
long long a[N];
int f[N],ans[N],tmp[N];
int main()
{
    cin>>n>>k>>m;
    rep(i,n)scanf("%lld",&a[i]);
    int l=1,r=k+1;
    rep(i,n)
    {
        while (r<n && a[r+1]-a[i]<a[i]-a[l])l++,r++;
        if (a[r]-a[i]>a[i]-a[l])f[i]=r; else f[i]=l;
    }

    rep(i,n)ans[i]=i;
    while (m)
    {
        if (m&1)rep(i,n)ans[i]=f[ans[i]];
        rep(i,n)tmp[i]=f[i];
        rep(i,n)f[i]=tmp[f[i]];
        m>>=1;
    }
    rep(i,n)printf("%d%c",ans[i],i==n?'\n':' ');
    return 0;
}
}}}
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <vector>
#include <map>
#include <set>
#include <cmath>
#include <stack>
#include <cassert>
#define pb push_back
#define mp make_pair
#define rep(i,n) for(int i=1;i<=n;i++)
using namespace std;
#define N 1000010
int n,k;
long long m;
long long a[N];
int f[N],ans[N],tmp[N];
int main()
{
    cin>>n>>k>>m;
    rep(i,n)scanf("%lld",&a[i]);
    int l=1,r=k+1;
    rep(i,n)
    {
        while (r<n && a[r+1]-a[i]<a[i]-a[l])l++,r++;
        if (a[r]-a[i]>a[i]-a[l])f[i]=r; else f[i]=l;
    }
    rep(i,n)ans[i]=i;
    while (m)
    {
        if (m&1)rep(i,n)ans[i]=f[ans[i]];
        rep(i,n)tmp[i]=f[i];
        rep(i,n)f[i]=tmp[f[i]];
        m>>=1;
    }
    rep(i,n)printf("%d%c",ans[i],i==n?'\n':' ');
    return 0;
}