Cod sursa(job #283978)

Utilizator ConsstantinTabacu Raul Consstantin Data 20 martie 2009 21:13:38
Problema Range minimum query Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include<stdio.h>
#include<string.h>
#define min(a,b) ((a)<(b)?(a):(b))
#define po(a) (1<<(a))

long int v[100003][20],lg[100005],x,y,i,j,k,l,m,n,ln;

int main(){

freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);

scanf("%ld %ld",&n,&m);
memset(v,99,sizeof(v));
for(i=1;i<=n;i++)
        scanf("%ld",&v[i][0]);

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

for(i=2;i<=n;i++)
        lg[i]=lg[i/2]+1;
for(i=1;i<=m;i++)
        {scanf("%ld %ld",&x,&y);
        k=y-x+1;
        l=lg[k];

        printf("%ld\n",min(v[x][l],v[y-po(l)+1][l]));
        
       }
return 0;}