Cod sursa(job #1448805)

Utilizator GeiGeiGeorge Cioroiu GeiGei Data 7 iunie 2015 23:16:14
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
//0010
#include <iostream>
#include <fstream>

using namespace std;

long eb[20][250050];

int main() {
    ifstream fi("stramosi.in");
    ofstream fo("stramosi.out");
    streambuf *sb1, *sb2;
    sb1 = fi.rdbuf();
    sb2 = fo.rdbuf();
    cin.rdbuf(sb1);
    cout.rdbuf(sb2);
    ios::sync_with_stdio(false);

    long n, m;
    cin >> n >> m;

    for (long i = 1; i <= n; i++) {
        cin >> eb[0][i];
    }

    long aux = n, k = 0;
    while (aux > 0) {
        k++;
        aux >>= 1;
    }

    for (long i = 0; i < k; i++) {
        eb[i][0] = 0;
    }

    for (long i = 1; i < k; i++) {
        for (long j = 1; j <= n; j++) {
            eb[i][j] = eb[i - 1][eb[i - 1][j]];
        }
    }

    for (long w = 1; w <= m; w++) {
        long p = 0, q = 0;
        cin >> q >> p;

        int v[20], kp = 0;

        while (p > 0) {
            v[kp] = p % 2;
            p >>= 1;
            kp++;
        }

        while (kp > 0) {
            kp--;
            if (v[kp] == 1) {
                q = eb[kp][q];
            }
        }

        cout << q << "\n";
    }

    return 0;
}