Cod sursa(job #1662429)

Utilizator pas.andreiPopovici Andrei-Sorin pas.andrei Data 24 martie 2016 19:18:21
Problema Stramosi Scor 100
Compilator cpp Status done
Runda vanghelion-1 Marime 1.19 kb
#include <cstdio>
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
#include <functional>
#include <string>
#include <cstring>
#include <cmath>
#include <map>
#include <set>
#include <bitset>
#include <stack>
#include <iomanip>
#define MOD 1000000000
#define NMAX 250005
#define logMax 22
#define INF 0x3f3f3f3f
#define pb push_back

using namespace std;

typedef pair<int, int> pii;

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

int stramos[logMax][NMAX];

int main() {
    int n,m,i,j,p,q;
    bool ok;

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

    for(i=1;i<logMax;++i) {
        ok=0;
        for(j=1;j<=n;++j) {
            stramos[i][j]=stramos[i-1][stramos[i-1][j]];
            if(stramos[i][j]) ok = 1;
        }

        if(!ok) break;
    }

    while(m--) {
        fscanf(fin, "%d%d", &q,&p);

        i=0;
        while(p) {
            if(p&1)
                q=stramos[i][q];
            p>>=1;
            ++i;
        }

        fprintf(fout, "%d\n", q);
    }

    return 0;
}