题目

首先分析数据范围发现m很大,所以线性做法肯定不行,因此考虑倍增,即预处理出每个点跳1次后的位置。然后只用两个数组类似于快速幂,推出每个点跳m次后的位置。

预处理离每个点第k小的点,可以用长度为k的尺子尺取。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#define int long long
#define N 1001011
using namespace std;
int n, k, m;
int data[N], jum[N], ans[N], temp[N];
inline void init()
{
scanf("%lld%lld%lld", &n, &k, &m);
for (int i = 1; i <= n; i++)
scanf("%lld", &data[i]), ans[i] = i;
jum[1] = k + 1;
int l = 1, r = k + 1;
for (int i = 2; i <= n; i++)
{
while (r + 1 <= n && (data[r + 1] - data[i]) < (data[i] - data[l]) ) l++, r++;
if (data[r] - data[i] > data[i] - data[l])
jum[i] = r;
else
jum[i] = l;
}
}
signed main()
{
init();
while (m)
{
if (m & 1)
for (int i = 1; i <= n; i++)
ans[i] = jum[ans[i]];
m >>= 1;
for (int i = 1; i <= n; i++)
temp[i] = jum[i];
for (int i = 1; i <= n; i++)
jum[i] = temp[temp[i]];
}
for (int i = 1; i <= n; i++)
printf("%d ", ans[i]);
return 0;
}

最新文章

  1. 解除svn版本控制
  2. 从键盘上输入一个正整数n,请按照以下五行杨辉三角形的显示方式, 输出杨辉三角形的前n行。请采用循环控制语句来实现。
  3. 解决eclipse中egit中的cannot open git-upload-pack问题
  4. PLS-00221: &#39;function&#39; 不是过程或尚未定义
  5. oracle数据库什么情况下创建索引比较好
  6. Target Operator ID has No Access to Upgrade
  7. Python内置数据类型之Tuple篇
  8. 新霸哥带你进入java的世界
  9. Mongo客户端MongoVUE的基本使用
  10. jquery登录验证插件
  11. UVa1339 Ancient Cipher
  12. Scala入门系列(十):函数式编程之集合操作
  13. tar: This does not look like a tar archive tar: Skipping to next header tar: Exiting with failure status due to previous errors
  14. IP地址、端口、TCP协议、UDP协议
  15. 洛谷P1605走迷宫
  16. Golang福利爬虫
  17. 浅析Session和Cookie
  18. FMDB基本操作
  19. 安装及使用Eclipse Maven插件的经验
  20. ZJOI2018外省选手酱油记Day1

热门文章

  1. 创建maven父项目以及子项目
  2. C#泛型集合之——队列与堆栈
  3. Postman中添加真实请求(Chrome Networks中的全部请求,含https)copy as har
  4. loj#10013 曲线(三分)
  5. data:image/png;base64应用
  6. android 各个存储路径及获取方法总结
  7. 使用 shell 脚本配置 iOS 工程
  8. 【RAC】rac环境下的数据库备份与还原
  9. IDEA整合SVN遇到的坑
  10. python的交互式shell-ipython体验