Pagini recente » Cod sursa (job #2058689) | Cod sursa (job #1518698) | Cod sursa (job #2834583) | Cod sursa (job #169235) | Cod sursa (job #63926)
Cod sursa(job #63926)
#include<stdio.h>
long long n, m, p, q;
typedef struct
{
long long x, s1, s2, s3;
} stramos;
stramos v[400000];
long long cautare(int a, int b)
{
long long i, rez=b;
i=1;
if (a-i>=4)
for (i=1; i<=a; i+=4)
{
rez=v[rez].s3;
if (rez==0) return 0;
if (a-i<4 && a-i!=0)
switch (a-i)
{
case 1: rez=v[rez].s1; break;
case 2: rez=v[rez].s2; break;
case 3: rez=v[rez].s3; break;
}
}
else
switch (a-i)
{
case 0: rez=v[rez].x ; break;
case 1: rez=v[rez].s1; break;
case 2: rez=v[rez].s2; break;
case 3: rez=v[rez].s3; break;
}
return rez;
}
void prelucrare()
{
for (long long i=1; i<=n; i++)
{
v[i].s1=v[v[i].x].x;
v[i].s2=v[v[i].s1].x;
v[i].s3=v[v[i].s2].x;
}
}
int main()
{
long long i,j, rez;
FILE *in=fopen("stramosi.in","r");
FILE *out=fopen("stramosi.out","w");
fscanf(in,"%lld%lld",&n,&m);
for (i=1; i<=n; i++)
fscanf(in,"%lld",&v[i].x);
prelucrare();
for (i=1; i<=m; i++)
{
fscanf(in,"%lld%lld",&q,&p);
rez=cautare(p,q);
fprintf(out,"%lld\n",rez);
}
fcloseall();
return 0;
}