Pagini recente » Clasament wellcodesimulareav-10martie | Cod sursa (job #928536) | Cod sursa (job #2607013) | Cod sursa (job #3178523) | Cod sursa (job #2641500)
#include <fstream>
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 log[MaxN];
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];
}
}
for ( int i = 2; i <= n; ++i ) {
log[i] = log[i / 2] + 1;
}
while ( q-- ) {
int p, i;
fin >> i >> p;
int lg = log[p];
int b = i;
while ( p ) {
b = anc[b][lg];
p -= (1 << lg);
lg = log[p];
}
fout << b << "\n";
}
fin.close();
fout.close();
return 0;
}