Cod sursa(job #973104)

Utilizator CosminRusuCosmin Rusu CosminRusu Data 13 iulie 2013 14:38:21
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
/// problema cu multe aplicabilitati

#include <fstream>
#include <vector>
#include <bitset>
#include <queue>
#include <algorithm>
#include <utility>
#include <string.h>
#include <math.h>

using namespace std;

ifstream cin("stramosi.in");
ofstream cout("stramosi.out");


const int MAXN = 250005;
const int oo = (1<<31)-1;
const int other = 20;

typedef vector<int> Graph[MAXN];
typedef vector<int> :: iterator It;

int Query[other][MAXN], Lg[MAXN], n, m;

///Query[i][j] = al 2^i-lea stramos al lui j dinamica

int main()
{
    cin >> n >> m >> Query[0][1];
    for(int i = 2 ; i <= n ; ++ i)
        cin >> Query[0][i], Lg[i] = 1 + Lg[i>>1];
    for(int i = 1 ; (1<<i) <= n ; ++ i)
        for(int j = 1 ; j <= n ; ++ j)
            Query[i][j] = Query[i-1][Query[i-1][j]];

    for(int i = 1 ; i <= m ; ++ i)
    {
        int x, y;
        for(cin >> x >> y; y ; )
        {
            x = Query[Lg[y]][x];
            y -= 1 << Lg[y];
        }
        cout << x << "\n";
    }

    cin.close();
    cout.close();
    return 0;
}