Pagini recente » Cod sursa (job #1885117) | Cod sursa (job #138720) | Cod sursa (job #2690178) | Cod sursa (job #2481470) | Cod sursa (job #1646157)
#include <fstream>
#include <cstdio>
using namespace std;
FILE *fin = fopen ("stramosi.in", "r");
ofstream fout ("stramosi.out");
int n, m, i, j;
int dp[250010][18], put2[19];
int main()
{
fscanf (fin, "%d %d", &n, &m);
for (i = 1; i <= n; i++)
fscanf (fin, "%d", &dp[i][0]);
for (i = 1; i <= 17; i++)
for (j = 1; j <= n; j++)
dp[j][i] = dp[dp[j][i-1]][i-1];
put2[0] = 1;
for (i = 1; i <= 17; i++)
put2[i] = 2 * put2[i-1];
int q, p, val;
for (j = 1; j <= m; j++)
{
fscanf (fin, "%d %d", &q, &p);
val = q;
while (p) // inca nu am gasit al p-lea stramos al lui q
{
for (i = 0; i <= 17 && put2[i] <= p; i++);
if (i) i--;
while (put2[i] <= p)
{
p -= put2[i];
val = dp[val][i];
}
}
fout << val << '\n';
}
return 0;
}