Cod sursa(job #1875896)

Utilizator hegedusPaul Hegedus hegedus Data 11 februarie 2017 19:08:03
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
//RANGE MINIMUM QUERY (INFOARENA.RO)
#include <cstdio>
#include <algorithm>
#define NMAX 100001
#define LOGNMAX 18
using namespace std;

int n,m,x,i,j,put,k,sol;
int v[NMAX],a[NMAX][LOGNMAX];

void calculare_matrice()
{
    for(i=1;i<=n;i++)
        a[i][0]=v[i];
    for(i=n;i;i--)
        for(j=1;i+(1<<j)-1<=n;j++)
            a[i][j]=min(a[i][j-1],a[i+(1<<(j-1))][j-1]);
}

void log(int x)
{
    for(put=1,k=0;put*2<=x;put*=2,k++);
}

int main()
{
    freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);
    scanf("%d %d",&n,&m);
    for(x=1;x<=n;x++)
        scanf("%d",&v[x]);
    calculare_matrice();
    for(x=1;x<=m;x++)
    {
        scanf("%d %d",&i,&j);
        log(j-i+1);
        sol=min(a[i][k],a[j-(1<<k)+1][k]);
        printf("%d\n",sol);
    }
    return 0;
}