Pagini recente » franceza | Cod sursa (job #277308) | Borderou de evaluare (job #2247995) | Cod sursa (job #1642459) | Cod sursa (job #2452985)
#include <fstream>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int t[250010], n, m, nod, k, dp[250010][20];
int stramos(int nod, int k) {
if(!nod)
return 0;
else if (!k)
return nod;
else return stramos(t[nod], k-1);
}
int main() {
f >> n >> m;
for(int i = 1; i <= n; i++)
f >> t[i];
for(int i = 1; i <= n; i++) {
dp[i][0] = t[i];
for(int j = 1; (1 << j) <= 250000; j++) {
dp[i][j] = dp[dp[i][j-1]][j-1];
if(!dp[i][j])
break;
}
}
for(int i = 1; i <= m; i++) {
f >> nod >> k;
int x = 0;
while(1 << x <= k)
x++;
x--;
g << stramos(dp[nod][x], k-(1<<x)) << '\n';
//g << stramos(nod, k) << '\n';
}
}