Cod sursa(job #1664866)

Utilizator roxana.aeleneiAelenei Roxana roxana.aelenei Data 26 martie 2016 14:50:36
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <cstdio>
#include <algorithm>
using namespace std;
const int NMAX=100002;
int n ,m;
int mat[NMAX][20];
int lg2[NMAX];

int main()
{
    freopen("rmq.in","r", stdin);
    freopen("rmq.out","w",stdout);
    int a,b,k,l;
    scanf("%d%d",&n,&m);
    for(int i=1; i<=n; i++)
        scanf("%d",&mat[i][0]);

    lg2[1]=0;
    for(int i=2; i<=n; i++)
        lg2[i]=lg2[i/2]+1;

    for(int i=1; i<=n; i++)
        for(int j=1; (1<<j)<=i; j++)
    {
        k=i-(1<<(j-1));
        mat[i][j]=min(mat[i][j-1],mat[k][j-1]);
    }

    for(int i=1; i<=m; i++)
    {
        scanf("%d%d", &a,&b);
        l=lg2[b-a+1];
        printf("%d\n",min(mat[b][l],mat[a+(1<<l)-1][l]));

    }
    return 0;
}