Cod sursa(job #1646157)

Utilizator Leonard1998Olariu Leonard Leonard1998 Data 10 martie 2016 15:16:52
Problema Stramosi Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <fstream>
#include <cstdio>

using namespace std;

FILE *fin = fopen ("stramosi.in", "r");
ofstream fout ("stramosi.out");

int n, m, i, j;
int dp[250010][18], put2[19];

int main()
{
    fscanf (fin, "%d %d", &n, &m);
    for (i = 1; i <= n; i++)
        fscanf (fin, "%d", &dp[i][0]);

    for (i = 1; i <= 17; i++)
        for (j = 1; j <= n; j++)
            dp[j][i] = dp[dp[j][i-1]][i-1];

    put2[0] = 1;
    for (i = 1; i <= 17; i++)
        put2[i] = 2 * put2[i-1];

    int q, p, val;
    for (j = 1; j <= m; j++)
    {
        fscanf (fin, "%d %d", &q, &p);
        val = q;
        while (p) // inca nu am gasit al p-lea stramos al lui q
        {
            for (i = 0; i <= 17 && put2[i] <= p; i++);
            if (i) i--;
            while (put2[i] <= p)
            {
                p -= put2[i];
                val = dp[val][i];
            }
        }
        fout << val << '\n';
    }
    return 0;
}