Cod sursa(job #1672501)

Utilizator stefii_predaStefania Preda stefii_preda Data 2 aprilie 2016 20:00:47
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <cstdio>
#include <algorithm>
#define Max 100005

using namespace std;
int log[Max], rmq[Max][20];
int main()
{
    freopen ("rmq.in", "r", stdin);
    freopen ("rmq.out", "w", stdout);
    int n, m, i, j;
    scanf("%d %d", &n, &m);
    for(i= 1; i<= n; i++)
        scanf("%d", & rmq[i][0]);
    log[1]= 0;
    for(i= 2; i<= n; i++)
        log[i]= log[i/2]+ 1;

    for(j= 1; (1<<j)< n; j++)
        for(i= 1; i+ (1<<j)- 1<= n; i++)
            rmq[i][j]= min(rmq[i][j-1], rmq[i+ (1<<(j-1))][j-1]);
    int k, raspuns, p, q;
    for(i= 1; i<= m; i++)
    {
        scanf("%d %d", &p, &q);
        k= log[q- p+ 1];
        raspuns= min(rmq[p][k], rmq[q- (1<<k)+1][k] );
        printf("%d\n", raspuns);

    }
    return 0;
}