Pagini recente » Cod sursa (job #1870434) | Cod sursa (job #1741166) | Cod sursa (job #1208398) | Cod sursa (job #529880) | Cod sursa (job #1855796)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int n, m, i, v[250005], Q, P, dad[20][250005];
void build_stramosi()
{
for(int i=1;i<=n;i++)
dad[0][i]=v[i];
for(int k=1;k<=18;k++)
for(int i=1;i<=n;i++)
dad[k][i]=dad[k-1][dad[k-1][i]];//al 2^k-lea stramos este cel de-al 2^(k-1)-lea stramos al celui de-al 2^(k-1) stramos
}
int stramos(int Q, int P)
{
int aux=Q, i;
for(i=0;(1<<i)<=P;i++)
if(P & (1<<i))
aux=dad[i][aux];
return aux;
}
int main()
{
fin>>n>>m;
for(i=1;i<=n;i++)
fin>>v[i];
build_stramosi();
/*for(int k=0;k<=10;k++)
{for(int i=1;i<=n;i++)
cout<<dad[k][i]<<' ';
cout<<endl;}*/
for(i=1;i<=m;i++)
{
fin>>Q>>P;
fout<<stramos(Q,P)<<'\n';
}
return 0;
}