Pagini recente » Cod sursa (job #1377719) | Cod sursa (job #1608773) | Cod sursa (job #3232353) | Cod sursa (job #2906185) | Cod sursa (job #2641495)
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin( "stramosi.in" );
ofstream fout( "stramosi.out" );
const int MaxN = 250002;
const int MaxLog = 20;
int anc[MaxN][MaxLog]; //anc[i][p] = indicele stramosului 2^p al lui i
int main() {
int n, q;
fin >> n >> q;
for ( int i = 1; i <= n; ++i ) {
fin >> anc[i][0];
}
for ( int p = 1; p <= MaxLog - 1; ++p ) {
for ( int i = 1; i <= n; ++i ) {
anc[i][p] = anc[anc[i][p - 1]][p - 1];
}
}
while ( q-- ) {
int p, i;
fin >> i >> p;
int lg = (int)log2( p );
int b = anc[i][lg];
lg = p - (1 << lg);
while ( lg ) {
--lg;
b = anc[b][0];
}
fout << b << "\n";
}
fin.close();
fout.close();
return 0;
}