Cod sursa(job #156357)

Utilizator rethosPaicu Alexandru rethos Data 12 martie 2008 14:52:06
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <stdio.h>
#define NM 100001
#define lgNM 18
#define min(a,b) (a<b?a:b)
long a[NM][lgNM];

long nrbiti(long x)
{ long nr=0;
  while (x)
	{ nr++;
	  x=x>>1;
	}
  return nr;
}

int main()
{ long n,m;
  freopen("rmq.in","rt",stdin);
  freopen("rmq.out","wt",stdout);
  scanf("%ld %ld",&n,&m);
  long i,j,x,y,nr,nrn,minim,dif;
  for (i=1;i<=n;i++) scanf("%ld",&a[i][0]);
  nrn=nrbiti(n);
  for (j=1;j<=nrn;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("%ld %ld",&x,&y);
	  nr=nrbiti(y-x+1);nr--;
	  minim=min(a[x][nr-1],a[y-(1<<nr)+1][nr]);
	  printf("%ld\n",minim);
	}
  fcloseall();
  return 0;
}