Pagini recente » Cod sursa (job #2388711) | Cod sursa (job #2303393) | Cod sursa (job #499815) | Cod sursa (job #2824298) | Cod sursa (job #215782)
Cod sursa(job #215782)
#include <stdio.h>
#define NMAX 350001
#define LOGMAX 18
int N,M,logN,P[LOGMAX][NMAX];
void read_me()
{
freopen("stramosi.in","r",stdin);
scanf("%d%d",&N,&M);
for(int i = 1; i <= N; ++i)
scanf("%d",&P[0][i]);
}
void proc() // O(N log N)
{
int log;
for(log = 1; 1<<log <=N ; ++log)
for(int i = 1; i <= N; ++i)
if(P[log - 1][i])
P[log][i] = P[log - 1][ P[log - 1][i]];
logN = --log;
}
int meta_bsrc(int nod,int nth)
{
int k = logN, p = nod;
for(; nth ; --k)
if(1<<k <= nth)
p = P[k][p], 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();
}