Cod sursa(job #2267400)

Utilizator vladboss2323Ciorica Vlad vladboss2323 Data 23 octombrie 2018 16:55:30
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <fstream>

using namespace std;

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

const int NMAX = 250005;
int Sol[21][NMAX];
int Log2[NMAX];
int N, M;

void Read(){
    in >> N >> M;
    for(int i = 1; i <= N; ++i)
        in >> Sol[0][i];
}

void Calculate(){
    for(int i = 2; i <= N; ++i)
        Log2[i] = Log2[i / 2] + 1;
    for(int i = 1; (1 << i) <= N; ++i)
      for(int j = 1; j <= N; ++j)
            Sol[i][j] = Sol[i - 1][Sol[i - 1][j]];
}

int Find(int P, int Q){
    while(P){
        int R = Log2[P];
        Q = Sol[R][Q];
        P -= (1 << R);
    }
    return Q;
}

int main(){
    Read();
    Calculate();
    while(M--){
        int P, Q;
        in >> Q >> P;
        out << Find(P, Q) << "\n";
    }
    return 0;
}