Cod sursa(job #350165)

Utilizator mika17Mihai Alex Ionescu mika17 Data 22 septembrie 2009 22:17:24
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <stdio.h>
#include <string.h>
#define min(a,b) ((a) < (b) ? (a) : (b))

int T[17][100000],N,M,log2[100001];

int main() {
    
    freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);
    
    scanf("%d%d",&N,&M);

    for(int i = 2; i <= N; ++i)
     log2[i] = log2[i >> 1] + 1;
    
    for(int i = 0 ; i < N; ++i)
     scanf("%d",&T[0][i]);
    
    for(int k = 1; (1<<k) <= N ; ++k)
     for(int i = 0; i + (1<<k) - 1 < N; ++i)
      T[k][i] = min(T[k - 1][i],T[k - 1][i + (1<<(k-1))]);
    
    
    for(int x,y; M--;) {
            scanf("%d%d",&x,&y);
            --x,--y;
            printf("%d\n",min(T[log2[y - x + 1]][x],T[log2[y - x + 1]][y - (1<<log2[y - x + 1]) + 1]));
    }
    
    return 0;
}