Cod sursa(job #1255857)

Utilizator BlueStrutAndrei Prahoveanu BlueStrut Data 5 noiembrie 2014 12:29:47
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include<cstdio>
#include<cmath>
#define lg (1<<(i-1))
using namespace std;
int i, j, n, m, a[19][50001], b[100001], x, y, z;
int min(int a, int b){if (a<=b) return a; else return b;}
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", &b[i]);
    for (i=1;i<n;i++) a[1][i]=min(b[i], b[i+1]);
    for (i=2;lg<=n;i++) {
        for (j=1;j+lg<=n;j++)
            a[i][j]=min(a[i-1][j], a[i-1][j+lg]);
    }
    for (i=1;i<=m;i++) {
        scanf("%d%d", &x, &y);
        z=log2(y-x+1);
        printf("%d\n", min(a[z][x], a[z][y-z]));
    }
    return 0;
}