Problem p02684 (C++) — buggy submission, verdict: Runtime Error

/*
--------------------------------DO NOT COPY I REQUEST YOU
PLEASE--------------------------

AUTHOR : Chandan Agrawal
College : Poornima College of Engg. jaipur, Raj
Mail : chandanagrawal23@gmail.com


 ██████╗ ██╗  ██╗  █████╗  ███╗   ██╗ ██████╗   █████╗  ███╗   ██╗
██╔════╝ ██║  ██║ ██╔══██╗ ████╗  ██║ ██╔══██╗ ██╔══██╗ ████╗  ██║
██║      ███████║ ███████║ ██╔██╗ ██║ ██║  ██║ ███████║ ██╔██╗ ██║
██║      ██╔══██║ ██╔══██║ ██║╚██╗██║ ██║  ██║ ██╔══██║ ██║╚██╗██║
╚██████╗ ██║  ██║ ██║  ██║ ██║ ╚████║ ██████╔╝ ██║  ██║ ██║ ╚████║
 ╚═════╝ ╚═╝  ╚═╝ ╚═╝  ╚═╝ ╚═╝  ╚═══╝ ╚═════╝  ╚═╝  ╚═╝ ╚═╝  ╚═══╝

*/

#include <bits/stdc++.h>
#include <stdio.h>
using namespace std;

#define fastio                                                                 \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define MAX 100050

#define ll long long
#define ld long double
#define lli long long int

#define pb emplace_back
#define INF 1000000000
#define mod 10000000019
#define MOD 10000000019
// #define mp make_pair
#define loop(i, n) for (lli i = 0; i < n; i++)
#define loopitr(xt, vec) for (auto xt : vec)
#define FOR(i, a, b) for (lli i = a; i < b; i += 1)
#define loop_rev(i, n) for (lli i = n - 1; i >= 0; i--)
#define FOR_REV(i, a, b) for (lli i = a; i >= b; i--)
#define all(v) v.begin(), v.end()
#define sz(x) int(x.size())
#define pii pair<int, int>
#define F first
#define S second

#define mii map<lli, lli>
#define vi vector<lli>
#define seti set<lli>

#define itr ::iterator it
#define WL(t) while (t--)
#define gcd(a, b) __gcd((a), (b))
#define lcm(a, b) (a / gcd(a, b)) * b
#define abs(x) ((x < 0) ? -(x) : x)

#define print(x) printf("%lli\\n", x);
#define print2(x, y) printf("%lli %lli\\n", x, y);
#define print3(x, y, z) printf("%lli %lli %lli\\n", x, y, z);

#define scan(x) scanf("%lld", &x);
#define scan2(x, y) scanf("%lld %lld", &x, &y);
#define scan3(x, y, z) scanf("%lld %lld %lld", &x, &y, &z);

#define scanarr(a, n)                                                          \\
  for (lli i = 0; i < n; i++)                                                  \\
    cin >> a[i];
#define scanvector(a, n)                                                       \\
  for (lli i = 0; i < n; i++) {                                                \\
    lli x;                                                                     \\
    cin >> x;                                                                  \\
    a.push_back(x);                                                            \\
  }

#define printarr(a, n)                                                         \\
  for (lli i = 0; i < n; i++)                                                  \\
    printf("%lli ", a[i]);                                                     \\
  printf("\\n");
#define printvector(vec)                                                       \\
  for (auto xt : vec)                                                          \\
    cout << xt << " ";                                                         \\
  cout << "\\n";
#define printset(st)                                                           \\
  for (auto xt : st)                                                           \\
    cout << xt << " ";                                                         \\
  cout << "\\n";

#define FD(N) fixed << setprecision(N)

#define endl '\\n'

#define deb(x) cout << #x << " " << x << endl;

/*
ifstream cinn("i3.txt");
ofstream coutt("o3.txt");
*/

lli find_mod(string s) {
  lli i, x = 0;
  for (i = 0; i < s.length(); i++)
    x = (x * 10 + s[i] - '0') % MOD;
  return x;
}

bool prime[MAX + 1];

void sieve1() { // prime or not
  for (int i = 0; i <= MAX; i++)
    prime[i] = 1;
  prime[0] = prime[1] = 0;
  for (lli i = 4; i <= MAX; i += 2)
    prime[i] = 0;
  for (int p = 3; p * p <= MAX; p += 2) {
    if (prime[p] == 1)
      for (int i = p * 2; i <= MAX; i += p) {
        prime[i] = 0;
      }
  }
}

lli spf[MAX + 1];

void sieve2() { // smallest prime factor of N.

  loop(i, MAX + 1) spf[i] = i;
  for (lli i = 4; i <= MAX; i += 2)
    spf[i] = 2;

  for (lli i = 3; i * i <= MAX; i++) {
    if (spf[i] == i) {
      for (int j = i * i; j <= MAX; j += i)
        if (spf[j] == j) // marking spf[j] if it is not previously marked
          spf[j] = i;
    }
  }
}

lli lpf[MAX + 1];

void sieve3() { // largest prime factor of N
  loop(i, MAX + 1) lpf[i] = i;
  for (lli i = 4; i <= MAX; i += 2)
    lpf[i] = 2;

  for (lli i = 3; i * i <= MAX; i++) {
    if (lpf[i] == i) {
      for (int j = 2 * i; j <= MAX; j += i)
        lpf[j] = i;
    }
  }
}

bool is_even(lli n) { return (!(n & 2)); }

bool is_odd(lli n) { return (n & 2); }

// memset(array_name , initialized value , sizeof(data_type_of_array))

bool isPrime(lli n) {
  if (n <= 1)
    return false;
  if (n <= 3)
    return true;
  if (n == 5)
    return true;
  if ((n % 2 == 0) || (n % 3 == 0) || (n % 5 == 0))
    return false;
  for (lli i = 5; i * i <= n; i += 6)
    if ((n % i == 0) || (n % (i + 2) == 0))
      return false;
  return true;
}

lli reversenum(lli x) {
  lli num = 0;
  while (x > 0) {
    num = num * 10 + x % 10;
    x = x / 10;
  }
  return num;
}

bool ispalindrome(string s) {
  string q = s;
  reverse(q.begin(), q.end());
  return (s == q);
}

bool isvowel(char x) {
  return (x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u');
}

lli mceil(lli a, lli b) {
  if (a % b == 0)
    return (a / b);
  else
    return (a / b + 1);
}
lli mfloor(lli a, lli b) { return (a / b); }
lli sumarr(lli a[], lli n) {
  lli sum = 0;
  loop(i, n) sum += a[i];
  return sum;
}
ll modmullong(ll a, ll b) {
  ll res = 0;
  a %= mod;
  while (b) {
    if (b & 1)
      res = (res + a) % mod;
    a = (2 * a) % mod;
    b >>= 1;
  }
  return res;
}
ll modmul(ll a, ll b) { return ((a % mod) * (b % mod)) % mod; }
ll modmul2(ll a, ll b) {
  return (((a % (mod - 1)) * (b % (mod - 1))) % (mod - 1));
}

ll modadd(ll a, ll b) { return ((a % mod) + (b % mod) + mod) % mod; }

ll modsub(ll a, ll b) { return ((a % mod) - (b % mod) + mod) % mod; }

lli fastexpo(lli a, lli b) {
  a = a % mod;
  lli ans = 1;
  while (b) {
    if (b & 1)
      ans = (ans * 1ll * a) % mod;
    a = (a * 1ll * a) % mod;
    b = b / 2;
  }
  return ans;
}

lli phi[MAX];
void euler_phi() { // euler totient function
  loop(i, MAX - 1) phi[i + 1] = i + 1;
  for (lli p = 2; p < MAX; p++) {
    if (phi[p] == p) {
      phi[p] = p - 1;

      for (lli i = 2 * p; i < MAX; i += p)
        phi[i] = (phi[i] / p) * (p - 1);
    }
  }
}

lli myphi(lli n) {
  lli result = n;
  for (lli p = 2; p * p <= n; ++p) {
    if (n % p == 0) {
      while (n % p == 0)
        n /= p;
      result -= result / p;
    }
  }
  if (n > 1)
    result -= result / n;
  return result;
}

void prime_factorise(lli n, map<lli, lli> &mp) {

  while (n % 2 == 0) {
    mp[2]++;
    n /= 2;
  }
  for (lli i = 3; i * i <= n; i += 2) {
    while (n % i == 0) {
      mp[i]++;
      n /= i;
    }
  }

  if (n > 1)
    mp[n]++;
}

lli cntbits(lli n) {
  lli cnt = 0;
  while (n) {
    cnt++;
    n /= 2;
  }
  return cnt;
}

lli fact[100001];
void facto() {
  fact[0] = 1;
  for (lli i = 1; i <= 100000; i++)
    fact[i] = modmul(fact[i - 1], i);
}

lli nCr(lli n, lli r) {
  if (n < r)
    return 0;
  else {
    r = min(r, n - r);
    lli a = 1, b = 1;
    for (lli i = 0; i < r; i++) {
      a = (a * (n - i)) % mod;
      b = (b * (i + 1)) % mod;
    }
    a = modmul(a, fastexpo(b, mod - 2));
    return a;
  }
}
bool ispower2(lli n) { return (n and (n & (n - 1)) == 0); }

vector<string> split(string s, char ch) {
  vector<string> ans;
  string temp = "";
  for (lli i = 0; i < sz(s); i++) {
    if (s[i] == ch) {
      ans.pb(temp);
      temp = "";
    } else {
      temp += s[i];
    }
  }
  ans.pb(temp);
  return ans;
}

// chandan1,2
void chandan1() {
  int y = 1;
  return;
}
void chandan2() {
  loop(i, 10) { lli x = 1; }
  return (chandan1());
}

int main() {
  fastio lli t = 1;
  // cin>>t;
  chandan2();
  while (t--) {
    lli n, k;
    cin >> n >> k;
    lli a[n + 1];
    for (lli i = 1; i <= n; i++)
      cin >> a[i];
    if (a[1] == 1) {
      cout << 1;
      return 0;
    }
    mii mp;
    vi vc;
    lli prev = 1;
    mp[prev]++;
    vc.pb(prev);
    lli prevind;
    while (true) {
      if (mp.find(a[prev]) != mp.end() && a[prev] != 1) {
        vc.pb(a[prev]);
        break;
      }
      mp[a[prev]]++;
      vc.pb(a[prev]);
      prev = a[prev];
    }
    lli val = vc[sz(vc) - 1];
    for (lli i = sz(vc) - 2; i >= 1; i--) {
      if (vc[i] == val) {
        prevind = i;
        break;
      }
    }
    // prevind++;

    lli clen = sz(vc) - 1;
    lli mlen = clen - prevind;
    //    cout<<prevind<<endl;
    // cout<<clen<<" "<<mlen<<endl;
    mlen += 1;
    if (k <= prevind)
      cout << vc[k];
    else {
      k = k - prevind;
      lli leni = sz(vc) - 1 - prevind;
      k = k % leni;
      cout << vc[k + prevind];
    }
  }

  return 0;
}


Error: WA

Fixed submission:

/*
--------------------------------DO NOT COPY I REQUEST YOU
PLEASE--------------------------

AUTHOR : Chandan Agrawal
College : Poornima College of Engg. jaipur, Raj
Mail : chandanagrawal23@gmail.com


 ██████╗ ██╗  ██╗  █████╗  ███╗   ██╗ ██████╗   █████╗  ███╗   ██╗
██╔════╝ ██║  ██║ ██╔══██╗ ████╗  ██║ ██╔══██╗ ██╔══██╗ ████╗  ██║
██║      ███████║ ███████║ ██╔██╗ ██║ ██║  ██║ ███████║ ██╔██╗ ██║
██║      ██╔══██║ ██╔══██║ ██║╚██╗██║ ██║  ██║ ██╔══██║ ██║╚██╗██║
╚██████╗ ██║  ██║ ██║  ██║ ██║ ╚████║ ██████╔╝ ██║  ██║ ██║ ╚████║
 ╚═════╝ ╚═╝  ╚═╝ ╚═╝  ╚═╝ ╚═╝  ╚═══╝ ╚═════╝  ╚═╝  ╚═╝ ╚═╝  ╚═══╝

*/

#include <bits/stdc++.h>
#include <stdio.h>
using namespace std;

#define fastio                                                                 \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);                                                                  \\
  cout.tie(0);
#define MAX 100050

#define ll long long
#define ld long double
#define lli long long int

#define pb emplace_back
#define INF 1000000000
#define mod 10000000019
#define MOD 10000000019
// #define mp make_pair
#define loop(i, n) for (lli i = 0; i < n; i++)
#define loopitr(xt, vec) for (auto xt : vec)
#define FOR(i, a, b) for (lli i = a; i < b; i += 1)
#define loop_rev(i, n) for (lli i = n - 1; i >= 0; i--)
#define FOR_REV(i, a, b) for (lli i = a; i >= b; i--)
#define all(v) v.begin(), v.end()
#define sz(x) int(x.size())
#define pii pair<int, int>
#define F first
#define S second

#define mii map<lli, lli>
#define vi vector<lli>
#define seti set<lli>

#define itr ::iterator it
#define WL(t) while (t--)
#define gcd(a, b) __gcd((a), (b))
#define lcm(a, b) (a / gcd(a, b)) * b
#define abs(x) ((x < 0) ? -(x) : x)

#define print(x) printf("%lli\\n", x);
#define print2(x, y) printf("%lli %lli\\n", x, y);
#define print3(x, y, z) printf("%lli %lli %lli\\n", x, y, z);

#define scan(x) scanf("%lld", &x);
#define scan2(x, y) scanf("%lld %lld", &x, &y);
#define scan3(x, y, z) scanf("%lld %lld %lld", &x, &y, &z);

#define scanarr(a, n)                                                          \\
  for (lli i = 0; i < n; i++)                                                  \\
    cin >> a[i];
#define scanvector(a, n)                                                       \\
  for (lli i = 0; i < n; i++) {                                                \\
    lli x;                                                                     \\
    cin >> x;                                                                  \\
    a.push_back(x);                                                            \\
  }

#define printarr(a, n)                                                         \\
  for (lli i = 0; i < n; i++)                                                  \\
    printf("%lli ", a[i]);                                                     \\
  printf("\\n");
#define printvector(vec)                                                       \\
  for (auto xt : vec)                                                          \\
    cout << xt << " ";                                                         \\
  cout << "\\n";
#define printset(st)                                                           \\
  for (auto xt : st)                                                           \\
    cout << xt << " ";                                                         \\
  cout << "\\n";

#define FD(N) fixed << setprecision(N)

#define endl '\\n'

#define deb(x) cout << #x << " " << x << endl;

/*
ifstream cinn("i3.txt");
ofstream coutt("o3.txt");
*/

lli find_mod(string s) {
  lli i, x = 0;
  for (i = 0; i < s.length(); i++)
    x = (x * 10 + s[i] - '0') % MOD;
  return x;
}

bool prime[MAX + 1];

void sieve1() { // prime or not
  for (int i = 0; i <= MAX; i++)
    prime[i] = 1;
  prime[0] = prime[1] = 0;
  for (lli i = 4; i <= MAX; i += 2)
    prime[i] = 0;
  for (int p = 3; p * p <= MAX; p += 2) {
    if (prime[p] == 1)
      for (int i = p * 2; i <= MAX; i += p) {
        prime[i] = 0;
      }
  }
}

lli spf[MAX + 1];

void sieve2() { // smallest prime factor of N.

  loop(i, MAX + 1) spf[i] = i;
  for (lli i = 4; i <= MAX; i += 2)
    spf[i] = 2;

  for (lli i = 3; i * i <= MAX; i++) {
    if (spf[i] == i) {
      for (int j = i * i; j <= MAX; j += i)
        if (spf[j] == j) // marking spf[j] if it is not previously marked
          spf[j] = i;
    }
  }
}

lli lpf[MAX + 1];

void sieve3() { // largest prime factor of N
  loop(i, MAX + 1) lpf[i] = i;
  for (lli i = 4; i <= MAX; i += 2)
    lpf[i] = 2;

  for (lli i = 3; i * i <= MAX; i++) {
    if (lpf[i] == i) {
      for (int j = 2 * i; j <= MAX; j += i)
        lpf[j] = i;
    }
  }
}

bool is_even(lli n) { return (!(n & 2)); }

bool is_odd(lli n) { return (n & 2); }

// memset(array_name , initialized value , sizeof(data_type_of_array))

bool isPrime(lli n) {
  if (n <= 1)
    return false;
  if (n <= 3)
    return true;
  if (n == 5)
    return true;
  if ((n % 2 == 0) || (n % 3 == 0) || (n % 5 == 0))
    return false;
  for (lli i = 5; i * i <= n; i += 6)
    if ((n % i == 0) || (n % (i + 2) == 0))
      return false;
  return true;
}

lli reversenum(lli x) {
  lli num = 0;
  while (x > 0) {
    num = num * 10 + x % 10;
    x = x / 10;
  }
  return num;
}

bool ispalindrome(string s) {
  string q = s;
  reverse(q.begin(), q.end());
  return (s == q);
}

bool isvowel(char x) {
  return (x == 'a' || x == 'e' || x == 'i' || x == 'o' || x == 'u');
}

lli mceil(lli a, lli b) {
  if (a % b == 0)
    return (a / b);
  else
    return (a / b + 1);
}
lli mfloor(lli a, lli b) { return (a / b); }
lli sumarr(lli a[], lli n) {
  lli sum = 0;
  loop(i, n) sum += a[i];
  return sum;
}
ll modmullong(ll a, ll b) {
  ll res = 0;
  a %= mod;
  while (b) {
    if (b & 1)
      res = (res + a) % mod;
    a = (2 * a) % mod;
    b >>= 1;
  }
  return res;
}
ll modmul(ll a, ll b) { return ((a % mod) * (b % mod)) % mod; }
ll modmul2(ll a, ll b) {
  return (((a % (mod - 1)) * (b % (mod - 1))) % (mod - 1));
}

ll modadd(ll a, ll b) { return ((a % mod) + (b % mod) + mod) % mod; }

ll modsub(ll a, ll b) { return ((a % mod) - (b % mod) + mod) % mod; }

lli fastexpo(lli a, lli b) {
  a = a % mod;
  lli ans = 1;
  while (b) {
    if (b & 1)
      ans = (ans * 1ll * a) % mod;
    a = (a * 1ll * a) % mod;
    b = b / 2;
  }
  return ans;
}

lli phi[MAX];
void euler_phi() { // euler totient function
  loop(i, MAX - 1) phi[i + 1] = i + 1;
  for (lli p = 2; p < MAX; p++) {
    if (phi[p] == p) {
      phi[p] = p - 1;

      for (lli i = 2 * p; i < MAX; i += p)
        phi[i] = (phi[i] / p) * (p - 1);
    }
  }
}

lli myphi(lli n) {
  lli result = n;
  for (lli p = 2; p * p <= n; ++p) {
    if (n % p == 0) {
      while (n % p == 0)
        n /= p;
      result -= result / p;
    }
  }
  if (n > 1)
    result -= result / n;
  return result;
}

void prime_factorise(lli n, map<lli, lli> &mp) {

  while (n % 2 == 0) {
    mp[2]++;
    n /= 2;
  }
  for (lli i = 3; i * i <= n; i += 2) {
    while (n % i == 0) {
      mp[i]++;
      n /= i;
    }
  }

  if (n > 1)
    mp[n]++;
}

lli cntbits(lli n) {
  lli cnt = 0;
  while (n) {
    cnt++;
    n /= 2;
  }
  return cnt;
}

lli fact[100001];
void facto() {
  fact[0] = 1;
  for (lli i = 1; i <= 100000; i++)
    fact[i] = modmul(fact[i - 1], i);
}

lli nCr(lli n, lli r) {
  if (n < r)
    return 0;
  else {
    r = min(r, n - r);
    lli a = 1, b = 1;
    for (lli i = 0; i < r; i++) {
      a = (a * (n - i)) % mod;
      b = (b * (i + 1)) % mod;
    }
    a = modmul(a, fastexpo(b, mod - 2));
    return a;
  }
}
bool ispower2(lli n) { return (n and (n & (n - 1)) == 0); }

vector<string> split(string s, char ch) {
  vector<string> ans;
  string temp = "";
  for (lli i = 0; i < sz(s); i++) {
    if (s[i] == ch) {
      ans.pb(temp);
      temp = "";
    } else {
      temp += s[i];
    }
  }
  ans.pb(temp);
  return ans;
}

// chandan1,2
void chandan1() {
  int y = 1;
  return;
}
void chandan2() {
  loop(i, 10) { lli x = 1; }
  return (chandan1());
}

int main() {
  fastio lli t = 1;
  // cin>>t;
  chandan2();
  while (t--) {
    lli n, k;
    cin >> n >> k;
    lli a[n + 1];
    for (lli i = 1; i <= n; i++)
      cin >> a[i];
    mii mp;
    vi vc;
    lli prev = 1;
    mp[prev]++;
    vc.pb(prev);
    lli prevind;
    while (true) {
      if (mp.find(a[prev]) != mp.end() && a[prev] != 1) {
        vc.pb(a[prev]);
        break;
      }
      mp[a[prev]]++;
      vc.pb(a[prev]);
      prev = a[prev];
    }
    lli val = vc[sz(vc) - 1];
    for (lli i = sz(vc) - 2; i >= 1; i--) {
      if (vc[i] == val) {
        prevind = i;
        break;
      }
    }
    prevind++;
    // cout<<prevind<<endl;
    lli clen = sz(vc) - 1;
    lli mlen = clen - prevind;
    if (k <= sz(vc) - 1)
      cout << vc[k];
    else
      // cout<<clen<<" "<<mlen<<endl;
      cout << a[(k % clen + mlen)];
  }

  return 0;
}