Pagini recente » Cod sursa (job #2172697) | Cod sursa (job #989922) | Cod sursa (job #1579794) | Cod sursa (job #1358909) | Cod sursa (job #215779)
Cod sursa(job #215779)
#include <stdio.h>
#define NMAX 250001
#define LOGMAX 17
int N,M,logN,P[NMAX][LOGMAX];
void read_me()
{
freopen("stramosi.in","r",stdin);
scanf("%d%d",&N,&M);
for(int i = 1; i <= N; ++i)
scanf("%d",&P[i][0]);
}
void proc() // O(N log N)
{
int log;
for(log = 1; 1<<log <=N ; ++log)
for(int i = 1; i <= N; ++i)
if(P[i][log - 1])
P[i][log] = P[ P[i][log - 1]][log - 1];
logN = --log;
}
int meta_bsrc(int nod,int nth)
{
int k = logN, p = nod;
for(; nth ; --k)
if(1<<k <= nth)
p = P[p][k], nth -= 1<<k;
return p;
}
void query() // O(M log N)
{
int n,nth;
freopen("stramosi.out","w",stdout);
while(M--)
{
scanf("%d%d",&n,&nth);
printf("%d\n",meta_bsrc(n,nth));
}
}
int main()
{
read_me();
proc();
query();
}