Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- using namespace std;
- typedef long long ll;
- int k, n;
- ll m;
- int p[1 << 20];
- int to[1 << 20];
- int nx[1 << 20];
- int cr[1<<20];
- void solve() {
- cin >> n >> k >> m;
- for (int i = 0; i < n; i++) {
- scanf("%lld", p + i);
- }
- to[0] = k;
- to[n-1] = n-1-k;
- int l = 0;
- int r = k;
- for (int i = 1; i < n - 1; i++) {
- while (r < n - 1) {
- if (p[r+1] - p[i] < p[i] - p[l]) {
- r++; l++;
- } else break;
- }
- if (p[i] - p[l] >= p[r] - p[i]) to[i] = l; else to[i] = r;
- }
- for (int i = 0; i < n; i++) cr[i] = i;
- while (m) {
- if (m & 1) {
- for (int i = 0; i < n; i++)
- cr[i] = to[cr[i]];
- }
- for (int i = 0; i < n; i++)
- nx[i] = to[to[i]];
- for (int i = 0; i < n; i++) to[i] = nx[i];
- m /= 2;
- }
- for (int i = 0; i < n; i++) {
- if (i) printf(" ");
- printf("%d", cr[i]+1);
- }
- cout << endl;
- }
- int main() {
- //freopen("input.txt","r",stdin);
- //freopen("output.txt","w",stdout);
- solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement