Cod sursa(job #1665508)

Utilizator AlexVolatiluVoicu Alex AlexVolatilu Data 27 martie 2016 00:05:44
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <stdio.h>

using namespace std;

#define logmax 20

int log[100005];
int r[logmax][100005];


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

    log[1]=0;
    for(i=2;i<=n;i++)
        log[i]=log[i>>1]+1;
    logn=log[n];
    for(i=1;i<=n;i++)
    {
        for(j=1;i>=(1<<j);j++)
        {
            k=i-(1<<(j-1));
            r[j][i] = r[j-1][i]<=r[j-1][k] ? r[j-1][i] : r[j-1][k];
        }
    }

    for(i=1;i<=m;i++)
    {
        scanf("%d%d",&a,&b);
        l=log[b-a+1];
        printf("%d\n",(r[l][b]<=r[l][a+(1<<l)-1] ? r[l][b] : r[l][a+(1<<l)-1]));
    }
    return 0;
}