Cod sursa(job #156857)

Utilizator rethosPaicu Alexandru rethos Data 12 martie 2008 19:33:13
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <stdio.h>
#define NM 100001
#define logNM 18
#define min(a,b) (a<b?a:b)
int a[NM][logNM];
int p2[NM];
int main()
{ long n,m;
  freopen("rmq.in","rt",stdin);
  freopen("rmq.out","wt",stdout);
  scanf("%d %d",&n,&m);
  int i,j,x,y,put2;
  for (i=1;i<=n;i++) scanf("%d",&a[i][0]);
  p2[1]=1;
  for (i=2;i<=n;i++) p2[i]=p2[i/2]+1;

  for (j=1;(1<<j)<=n;j++)
	for (i=1;i<=n-(1<<j)+1;i++)
		a[i][j]=min(a[i][j-1],a[i+(1<<j-1)][j-1]);

  for (i=1;i<=m;i++)
	{ scanf("%d %d",&x,&y);
	  put2=p2[y-x+1];
	  if (a[x][put2]>a[y-(1<<put2)+1][put2])
		 printf("%d",a[y-(1<<put2)+1][put2]);
	    else printf("%d",a[x][put2]);
	}
  fcloseall();
  return 0;
}