Pagini recente » Diferente pentru implica-te/arhiva-educationala intre reviziile 90 si 91 | Cod sursa (job #1551514) | Cod sursa (job #401033) | Autentificare | Cod sursa (job #307844)
Cod sursa(job #307844)
/*
ID: motty
TASK: stramosi
LANG: C++
SCORE: 100
*/
#include<cstdio>
#include<ctime>
#include<sstream>
#include<fstream>
#include<iostream>
#include<cmath>
#include<stack>
#include<list>
#include<cstdlib>
#include<vector>
#include<deque>
#include<string>
#define N 250001
#define logN 18
#define gol void
#define deschide freopen
using namespace std;
int n,m,r[N],v[logN][N];
gol read()
{
scanf("%d%d",&n,&m);
//citirea vectorului cu stramosii directi ai fiecarui membru - >
for( int i=1 ; i<=n ; ++i )
scanf("%d",&r[i]);
}
gol make_matrix()
{
//adaugarea stramosilor initiali in matrice - >
for( int j=1 ; j<=n ; ++j )
v[0][j]=r[j];
//configurarea matricei
for( int i=1 ; 1<<i <= n ; ++i )
for( int j=1 ; j<=n ; ++j )
v[i][j]=v[i-1][v[i-1][j]];
}
gol solve()
{
int q,p;
for( int k=1 ; k<=m ; ++k )
{
int i=0;
scanf("%d%d",&q,&p);
while(p)
{
if(p&1)// p -> impar
q=v[i][q];
p>>=1;// p/=2
++i;
}
printf("%d\n",q);
}
}
int main()
{
deschide("stramosi.in","r",stdin);
deschide("stramosi.out","w",stdout);
read();
make_matrix();
solve();
return 0;
}