Cod sursa(job #202790)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 11 august 2008 15:59:11
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <stdio.h>

#define FIN "rmq.in"
#define FOUT "rmq.out"

#define NMAX 101000
#define NMIN 20

int C[NMIN][NMAX];
int N,M;
int log[NMAX];
int s,c;
int x,y;
int REZ;

int min(int a, int b)
{

if (a>b) return b;
    else return a;
}


int main()
{
int i;

freopen(FIN,"rt",stdin);
freopen(FOUT,"wt",stdout);

scanf("%d %d", &N, &M);

for (i=1;i<=N;++i)
     scanf("%d", &C[0][i]);

log[0]=1;

for (i=2;i<=N;++i)
    log[i]=log[i/2]+1;

for (s=1,c=1;c<=N;++s,c<<=1)
     for (i=1;i<=N;++i)
	 C[s][i]=min(C[s-1][i],C[s-1][i+c]);

for (i=1;i<=M;++i)
    {
    scanf("%d %d", &x, &y);
    REZ=min(C[log[y-x+1]][x],C[log[y-x+1]][y-(1<<log[y-x+1])+1]);
    printf("%d\n", REZ);
    }
return 0;
}