Cod sursa(job #177228)

Utilizator ghiutaalexGhiuta Alex ghiutaalex Data 12 aprilie 2008 14:40:20
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.57 kb
#include<stdio.h>
#define M 100001
int a[20][M],b[M];
long min(long a,long b)
{if(a>b) return b;
 return a;
}
int main()
{long n,m,i,x,y,j,p;
 FILE*f=fopen("rmq.in","r");
 FILE*g=fopen("rmq.out","w");
 fscanf(f,"%ld %ld",&n,&m);
 for(i=1;i<=n;i++)
	{fscanf(f,"%ld",&a[0][i]);
         if(i>=2) b[i]=b[i/2]+1;} 
 for(i=1;i<=b[n];i++)
	for(j=1;j+(1<<i)-1<=n;j++)
		a[i][j]=min(a[i-1][j],a[i-1][j+(1<<(i-1))]);
 for(i=1;i<=m;i++)
	{fscanf(f,"%ld %ld",&x,&y);
         p=b[y-x+1];
	 fprintf(g,"%ld\n",min(a[p][x],a[p][y-(1<<p)+1]));}
 fcloseall();
 return 0;
}