Cod sursa(job #1426414)

Utilizator ButnaruButnaru George Butnaru Data 29 aprilie 2015 17:54:30
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.53 kb
#include <stdio.h>
#define min(a,b) ((a)<(b) ? (a):(b))
int n,m,i,j,x,y,aux,dif,rmq[17][100001],v[1000001];
int main(){
freopen ("rmq.in","r",stdin);
freopen ("rmq.out","w",stdout);
scanf("%d%d",&n,&m);
for (i=1;i<=n;i++) scanf("%d",&rmq[0][i]);
for (i=1;1<<i<=n;i++){
    aux=1<<(i-1);
for (j=1;j+aux<=n;j++)
    rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+aux]);
}
for (i=2;i<=n;i++) v[i]=v[i/2]+1;
for (i=1;i<=m;i++){
scanf("%d%d",&x,&y);
dif=v[y-x+1]; aux=1<<dif;
printf("%d\n",min(rmq[dif][x],rmq[dif][y-aux+1]));
}
return 0;
}