Pagini recente » Cod sursa (job #1796821) | Cod sursa (job #1302029) | Cod sursa (job #2393664) | Cod sursa (job #483645) | Cod sursa (job #2965045)
#include <fstream>
#include <queue>
#include <algorithm>
#include <climits>
using namespace std;
const int NMAX = 250000;
const int LGMAX = 17;
int dp[NMAX + 1][LGMAX + 1];
int lg[NMAX + 2];
int main()
{
ifstream cin("stramosi.in");
ofstream cout("stramosi.out");
int n, m, i, j;
cin >> n >> m;
for (i = 1; i <= n; i++)
{
cin >> dp[i][0];
lg[i + 1] = lg[(i + 1) / 2] + 1;
}
for (i = 1; i <= lg[n]; i++)
for (j = 1; j <= n; j++)
dp[j][i] = dp[dp[j][i - 1]][i - 1];
while (m--)
{
int p, q;
cin >> q >> p;
int ans = q;
for (int i = 0; (1 << i) <= p; i++)
if (p & (1 << i))
ans = dp[ans][i];
cout << ans << "\n";
}
}