Pagini recente » Cod sursa (job #2221801) | Cod sursa (job #2197315) | Cod sursa (job #1932970) | Cod sursa (job #672572) | Cod sursa (job #3227278)
#include <fstream>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int tata[250005], str[250005][20], lg[250005], put[20];
int main() {
int n, m, i,j;
fin >> n >> m;
put[0] = 1;
for (i = 1; i < 20; i++) {
put[i] = put[i-1] * 2;
}
for (i = 2; i <= n; i++) {
lg[i] = lg[i/2] + 1;
fin>>tata[i];
str[i][0] = tata[i];
}
for (j = 1; j < 20; j++)
for (i = 1; i <= n; i++)
str[i][j] = str[str[i][j-1]][j-1];
while (m--) {
int q, p;
fin >> q >> p;
while (p) {
q = str[q][lg[p]];
p = p - put[lg[p]];
}
fout<<q<<'\n';
}
return 0;
}