Cod sursa(job #2875061)

Utilizator Dragono63Stanciu Rares Stefan Dragono63 Data 20 martie 2022 19:09:15
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <bits/stdc++.h>
#define NMAX 250005
#define LOGMAX 19

using namespace std;

/*******************************/
// INPUT / OUTPUT

ifstream f("stramosi.in");
ofstream g("stramosi.out");
/*******************************/
/// GLOBAL DECLARATIONS

int N, M;
int dp[LOGMAX][NMAX];
/*******************************/
/// FUNCTIONS

void ReadInput();
void Solution();
/*******************************/
///-------------------------------------
inline void ReadInput()
{
    f >> N >> M;

    int x;
    for (int i = 1 ; i <= N ; ++ i)
    {
        f >> x;
        dp[0][i] = x; 
    }
}
///-------------------------------------
inline void RMQ()
{
    for (int i = 1 ; i < LOGMAX ; ++ i)
    {
        for (int j = 1 ; j <= N ; ++ j)
        {
            dp[i][j] = dp[i - 1][dp[i - 1][j]];
        }
    }
}
///-------------------------------------
int GetAncestor(int node, int p)
{
    for (int i = 0 ; i < LOGMAX ; ++ i)
    {
        if (p & (1 << i))
        {
            node = dp[i][node];
        }
    }

    return node;
}
///-------------------------------------
inline void Queries()
{
    int x, a, p;
    while (M --)
    {
        f >> a >> p;
        x = GetAncestor(a, p);
        g << x << "\n";
    }
}
///-------------------------------------
inline void Solution()
{
    RMQ();
    Queries();
}
///-------------------------------------
int main()
{
    ReadInput();
    Solution();
    return 0;
}