Cod sursa(job #651377)

Utilizator FIIBogdanPricopPricop Mihai FIIBogdanPricop Data 20 decembrie 2011 10:14:12
Problema Range minimum query Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.63 kb
#include<stdio.h>
long n,m,i,A[17][100001],ll[100001],l,t,j,x,y,m1,m2;
int main()
{	FILE *fin,*fout;
	fin=fopen("rmq.in","r");
	fout=fopen("rmq.out","w");
	fscanf(fin,"%ld%ld",&n,&m);
	for(i=1;i<=n;i++) fscanf(fin,"%ld",&a[0][i]);
	l=2;
	while(l<=n)
	{ j++;  ll[l]=1;
	  for(i=1;i<=n-l+1;i++) A[j][i]=(A[j-1][i]<A[j-1][i+(l>>1)])?A[j-1][i]:A[j-1][i+(l>>1)];
	  l<<=1;
	 }
	for(i=1;i<=n;i++) ll[i]+=ll[i-1];
	for(t=1;t<=m;t++)
	{  fscanf(fin,"%ld%ld",&x,&y);
	   i=ll[y-x+1]; l=1<<i;
	   m1=A[i][x]; m2=A[i][y-l+1];
	   if(m1>m2)
		m1=m2;
	   fprintf(fout,"%ld\n",m1);
	}

	fclose(fin);
	fclose(fout);
	return 0;
}