Pagini recente » Cod sursa (job #1718652) | Cod sursa (job #1983025) | Cod sursa (job #1032379) | Monitorul de evaluare | Cod sursa (job #72318)
Cod sursa(job #72318)
#include <stdio.h>
int main()
{
long m,n,i,j,k,a[20][250001],k2,h[18],v[250001];
FILE *f,*f2;
h[0]=1;
for (i=1;i<=17;i++) h[i]=h[i-1]<<1;
f=fopen("stramosi.in","r");
fscanf(f,"%ld%ld",&n,&m);
for (i=1;i<=n;i++) {fscanf(f,"%ld",&a[1][i]);
v[i]=i;a[0][i]=1;}
j=2;k=n;
a[0][0]=0;
while (k!=0) {k2=k;k=0;
for (i=1;i<=k2;i++)
if (a[0][a[j-1][v[i]]]>=j-1) {a[j][v[i]]=a[j-1][a[j-1][v[i]]];a[0][v[i]]=j;k++;v[k]=v[i];}
j++;}
f2=fopen("stramosi.out","w");
for (i=0;i<m;i++) {fscanf(f,"%ld%ld",&k,&k2);
if (k2>=n) {k2=0;k=0;}
if (k2>=h[8]) j=17;
else j=8;
while (k2> 0) {if (k2>=h[j]) if (a[0][k]>=j+1) {k=a[j+1][k];k2=k2-h[j];if (k==0) k2=0;}
else {k2=0;k=0;}
j--;}
fprintf(f2,"%ld\n",k);
}
fclose(f);
fclose(f2);
return 0;
}