Cod sursa(job #1980544)

Utilizator NToniBoSSNicolae Tonitza NToniBoSS Data 13 mai 2017 12:56:21
Problema Range minimum query Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.71 kb
#include <stdio.h>
#include <stdlib.h>
int r[100001][21],v[100001],log[100001];
int min(int a,int b)
{
    if(a<b) return a;
    return b;
}
int main()
{
    int i,n,m,l,a,b,j;
    freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(i=1; i<=n; i++)
        scanf("%d",&v[i]);
    for(i=2; i<=n; i++)
        log[i]=1+log[i/2];
    for(i=1; i<=n; i++)
        r[i][0]=v[i];
    for(i=1; i<=n; i++)
        for(j=1; j<=log[i]; j++)
            r[i][j]=min(r[i-(1<<(j-1))][j-1],r[i][j-1]);
    for(i=1; i<=m; i++)
    {
        scanf("%d%d",&a,&b);
        l=log[b-a+1];
        printf("%d\n",min(r[a+(1<<l)-1][l],r[b][l]));
    }

    return 0;
}