Cod sursa(job #1672507)

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

using namespace std;
int lg[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]);
    lg[1]= 0;
    for(i= 2; i<= n; i++)
        lg[i]= lg[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= lg[q- p+ 1];
        raspuns= min(rmq[p][k], rmq[q- (1<<k)+1][k] );
        printf("%d\n", raspuns);

    }
    return 0;
}