Problem p03953 (C++)

Buggy submission (status: Runtime Error):
// This amazing code is by Eric Sunli Chen.
#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <string>
#include <utility>
#include <vector>
using namespace std;
template <typename T> void get_int(T &x) {
  char t = getchar();
  bool neg = false;
  x = 0;
  for (; (t > '9' || t < '0') && t != '-'; t = getchar())
    ;
  if (t == '-')
    neg = true, t = getchar();
  for (; t <= '9' && t >= '0'; t = getchar())
    x = x * 10 + t - '0';
  if (neg)
    x = -x;
}
template <typename T> void print_int(T x) {
  if (x < 0)
    putchar('-'), x = -x;
  short a[20] = {}, sz = 0;
  while (x > 0)
    a[sz++] = x % 10, x /= 10;
  if (sz == 0)
    putchar('0');
  for (int i = sz - 1; i >= 0; i--)
    putchar('0' + a[i]);
}
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
#define get1(a) get_int(a)
#define get2(a, b) get1(a), get1(b)
#define get3(a, b, c) get1(a), get2(b, c)
#define printendl(a) print_int(a), puts("")
typedef long long LL;
typedef unsigned long long uLL;
typedef pair<int, int> pii;
const int inf = 0x3f3f3f3f;
const LL Linf = 1ll << 61;
const double pi = acos(-1.0);

int n, m, k, a[100111], ord[100111];
LL x[100111], y[100111];

bool used[100111];
int top, stk[100111];
int main() {
  get1(n);
  for (int i = 1; i <= n; i++)
    get1(x[i]);
  for (int i = n; i >= 2; i--)
    x[i] -= x[i - 1];
  get2(m, k);
  for (int i = 2; i <= n; i++)
    ord[i] = i;
  for (int i = 1; i <= m; i++) {
    get1(a[i]);
    swap(ord[a[i]], ord[a[i] + 1]);
  }
  for (int i = 2; i <= n; i++) {
    if (used[i])
      continue;
    top = 0;
    int cur = i;
    while (!used[cur]) {
      used[cur] = 1;
      stk[top++] = cur;
      cur = ord[cur];
    }
    int shift = k % top;
    for (int j = 0; j < top; j++)
      y[stk[j]] = x[stk[(j + shift) % top]];
  }
  y[1] = x[1];
  for (int i = 2; i <= n; i++)
    y[i] += y[i - 1];
  for (int i = 1; i <= n; i++)
    printendl(y[i]);
  return 0;
}

Fixed submission:
// This amazing code is by Eric Sunli Chen.
#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <string>
#include <utility>
#include <vector>
using namespace std;
template <typename T> void get_int(T &x) {
  char t = getchar();
  bool neg = false;
  x = 0;
  for (; (t > '9' || t < '0') && t != '-'; t = getchar())
    ;
  if (t == '-')
    neg = true, t = getchar();
  for (; t <= '9' && t >= '0'; t = getchar())
    x = x * 10 + t - '0';
  if (neg)
    x = -x;
}
template <typename T> void print_int(T x) {
  if (x < 0)
    putchar('-'), x = -x;
  short a[20] = {}, sz = 0;
  while (x > 0)
    a[sz++] = x % 10, x /= 10;
  if (sz == 0)
    putchar('0');
  for (int i = sz - 1; i >= 0; i--)
    putchar('0' + a[i]);
}
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
#define get1(a) get_int(a)
#define get2(a, b) get1(a), get1(b)
#define get3(a, b, c) get1(a), get2(b, c)
#define printendl(a) print_int(a), puts("")
typedef long long LL;
typedef unsigned long long uLL;
typedef pair<int, int> pii;
const int inf = 0x3f3f3f3f;
const LL Linf = 1ll << 61;
const double pi = acos(-1.0);

int n, m, a[100111], ord[100111];
LL x[100111], y[100111], k;

bool used[100111];
int top, stk[100111];
int main() {
  get1(n);
  for (int i = 1; i <= n; i++)
    get1(x[i]);
  for (int i = n; i >= 2; i--)
    x[i] -= x[i - 1];
  get2(m, k);
  for (int i = 2; i <= n; i++)
    ord[i] = i;
  for (int i = 1; i <= m; i++) {
    get1(a[i]);
    swap(ord[a[i]], ord[a[i] + 1]);
  }
  for (int i = 2; i <= n; i++) {
    if (used[i])
      continue;
    top = 0;
    int cur = i;
    while (!used[cur]) {
      used[cur] = 1;
      stk[top++] = cur;
      cur = ord[cur];
    }
    int shift = k % top;
    for (int j = 0; j < top; j++)
      y[stk[j]] = x[stk[(j + shift) % top]];
  }
  y[1] = x[1];
  for (int i = 2; i <= n; i++)
    y[i] += y[i - 1];
  for (int i = 1; i <= n; i++)
    printendl(y[i]);
  return 0;
}