Pagini recente » Cod sursa (job #104664) | Cod sursa (job #390828) | Cod sursa (job #2789095) | Cod sursa (job #361251) | Cod sursa (job #1201070)
using namespace std;
#include <fstream>
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
const int Nmax = 250010;
const int logN = 18;
int m, n;
int s[logN][Nmax]; // s[i][j] - care este al 2^i -lea stramos al lui j
void preprocess() ;
int query(int, int) ;
int main()
{
int i, P, Q;
fin >> n >> m;
for(i = 1; i <= n; ++i) fin >> s[0][i];
preprocess();
for(; m; --m)
{
fin >> Q >> P;
fout << query(Q, P) << '\n';
}
/*for(i = 0; (1<<i) < n; ++i)
{
for(int j = 1; j <= n; ++j)
fout << s[i][j] << ' ';
fout << '\n';
}*/
return 0;
}
void preprocess()
{
int i, j;
for(i = 1; (1<<i) < n; ++i)
for(j = 1; j <= n; ++j)
s[i][j] = s[i-1][s[i-1][j]];
}
int query(int nod, int nr)
{
//returneaza al nr -lea stramos al lui nod
if(nr == 0) return nod;
for(int bit = 0; nr && nod && bit < 20; ++bit)
if(nr & (1<<bit))
nod = s[bit][nod],
nr -= (1<<bit);
return nod;
}