Pagini recente » Cod sursa (job #2664498) | Cod sursa (job #663317) | Cod sursa (job #3279246) | Cod sursa (job #1084377) | Cod sursa (job #3232337)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int main()
{
long long n, m, i, j, q, p;
fin >> n >> m;
int log_n = log2(n);
vector<vector<long long>> stramosi(log_n + 1, vector<long long>(n + 1, 0));
vector<long long> v(n + 1);
v[0] = 0;
for(i = 1; i <= n; ++i)
{
fin >> stramosi[0][i];
v[i] = v[stramosi[0][i]] + 1;
}
for(i = 1; i <= log_n; ++i)
for(j = 1; j <= n; ++j)
stramosi[i][j] = stramosi[i - 1][stramosi[i - 1][j]];
for(i = 0; i < m; ++i)
{
fin >> q >> p;
if(p >= v[q])
{
fout << "0\n";
}
else
{
long long exp = 0;
while(p)
{
if(p & 1)
q = stramosi[exp][q];
++exp;
p >>= 1;
}
fout << q << '\n';
}
}
return 0;
}