Cod sursa(job #1594426)

Utilizator BlueStrutAndrei Prahoveanu BlueStrut Data 9 februarie 2016 14:52:26
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include<cstdio>
#include<cmath>
using namespace std;
int i, n, p, a[18][100001], j, nr, x, y;
inline int min(int a, int b){if (a<=b) return a; else return b;}
int doi_la(int x){return (1<<x);}
int main(){
    freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);
    scanf("%d%d", &n, &p);
    for (i=1;i<=n;i++) scanf("%d", &a[0][i]);
    for (i=1;doi_la(i)<=n;i++)
        for (j=1;j<=n-doi_la(i-1)+1;j++)
            a[i][j]=min(a[i-1][j], a[i-1][j+doi_la(i-1)]);
    for (i=1;i<=p;i++) {
        scanf("%d%d", &x, &y);
        nr=log2(y-x+1);
        printf("%d\n", min(a[nr][x], a[nr][y-doi_la(nr)+1]));
    }
    return 0;
}