Cod sursa(job #72318)

Utilizator fogggabTassadar fogggab Data 13 iulie 2007 13:38:49
Problema Stramosi Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.81 kb
#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;
}