Pagini recente » Cod sursa (job #2959427) | Cod sursa (job #698416) | Cod sursa (job #84317) | Cod sursa (job #2600236) | Cod sursa (job #1799699)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
const int Nmax = 250002, Lgmax = 18;
int n, m, q, p;
int str[Lgmax][Nmax], lg[Nmax];
void Read();
void Prep();
int main()
{
Read();
Prep();
while (m)
{
m--;
fin >> q >> p;
for ( int i = 0;(1 << i) <= p; i++)
{
if ( ((1 << i) & p) == (1 << i) )
{
q = str[i][q];
}
if (q == 0)
p = 0;
}
fout << q << '\n';
}
fin.close();
fout.close();
return 0;
}
void Read()
{
fin >> n >> m;
for ( int i = 1; i <= n; i++ )
fin >> str[0][i];
}
void Prep()
{
lg[1] = 0;
lg[2] = 1;
for ( int i = 3; i <= n; i++ )
lg[i] = lg[i/2] + 1;
int N = lg[n];
for ( int j = 1; j <= N; j++ )
for ( int i = 1; i <= n; i++ )
{
str[j][i] = str[j-1][str[j-1][i]];
}
}