Pagini recente » Cod sursa (job #522054) | Cod sursa (job #1617752) | Cod sursa (job #2016675) | Cod sursa (job #1582969) | Cod sursa (job #2902079)
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int n, m;
int stramosi[22][250005];
int get_stramos(int membru, int stramos)
{
int sol = membru;
while(stramos)
{
int pow2 = 0;
while(((1<<pow2)<<1) <= stramos)
pow2++;
sol = stramosi[pow2][sol];
stramos -= (1<<pow2);
}
return sol;
}
int main()
{
fin >> n >> m;
for(int i = 1; i <= n; i ++)
fin >> stramosi[0][i];
for(int j = 1; (1<<j) <= n; j++)
for(int i = 1; i <= n; i++)
stramosi[j][i] = stramosi[j-1][stramosi[j-1][i]];
for(int i = 1; i <= m; i++)
{
int stramos, membru;
fin >> membru >> stramos;
fout << get_stramos(membru, stramos) << '\n';
}
}