Cod sursa(job #833691)

Utilizator UnforgivenMihai Catalin Botezatu Unforgiven Data 12 decembrie 2012 22:12:53
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>
#define MAX_SIZE 250000

using namespace std;

int stramosi[18][MAX_SIZE];
int lg[MAX_SIZE];

int main()
{
    ifstream input("stramosi.in");
    ofstream output("stramosi.out");
    int N , M , logN = 1;
    input >> N >> M;

    while ( (1 << logN) < N)
    {
        logN ++;
    }
    logN --;
    lg[1] = 0;
    for (int i = 2; i <= N;i++)
    {
        lg[i] = lg[i/2] + 1;
    }

    for (int i = 1 ;i <= N;i++)
    {
        input >> stramosi[0][i];
    }

    for (int i = 1 ; i <= logN;i++)
        for (int j = 1 ; j <= N;j++)
        {
            stramosi[i][j] = stramosi[i-1][stramosi[i-1][j]];
        }

    for (int i = 0 ; i < M ; i++)
    {
        int stram , height;
        input >> stram >> height;

        int answer = stramosi[lg[height]][stram];
        height = height - (1 << lg[height]);

        while (height != 0)
        {
            answer = stramosi[lg[height]][answer];
            height = height - (1 << lg[height]);
        }
        output << answer << "\n";

    }
    input.close();
    output.close();



    return 0;
}