Pagini recente » Cod sursa (job #2949080) | Cod sursa (job #999933) | Rating Gheorghe Antonia (antonia.gheorghe) | Cod sursa (job #1656125) | Cod sursa (job #2933384)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
vector <int> matrix[100];
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
void citire(void);
void afis(void);
void dfs(int poz);
void precalc(void);
int n, m, q, p, TT[250002], A[100][100], log[100]; //TT = vectorul de tati
int main()
{
fin>>n>>m;
citire();
precalc();
while(m--){
fin>>q>>p;
while(p){
int k = log[p];
q = A[k][q]; //a[k][q] == stramosul de grad 2 la puterea k a lui q
p -= (1<<k);
}
fout<<q<<"\n";
}
}
void citire(void){
int i, n2;
n2 = n;
while(n2--){
fin>>i;
TT[n - n2] = i;
}
}
void precalc(void){
for(int i = 2; i <= n; i++)
log[i] = log[i / 2] + 1; //partea intreaga a log in baza 2 din i sau cea mai mare put a lui 2 <= i
for(int i = 1; i <= n; i++)
A[0][i] = TT[i];
for(int i = 1; (1<<i) <= n; i++) //1<<i = 2 la puterea i
for(int j = 1; j <= n; j++)
A[i][j] = A[i - 1][A[i - 1][j]];
}