Cod sursa(job #703633)

Utilizator AplayLazar Laurentiu Aplay Data 2 martie 2012 13:20:27
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<stdio.h>
int log2[100100],M[21][100010],n,m;
FILE *f=fopen("rmq.in","r");

void citire()
{
    fscanf(f,"%d%d",&n,&m);
    for(int i=1;i<=n;++i)
        fscanf(f,"%d",&M[0][i]);
}

int minim(int a,int b)
{
    if(a<=b) return a;
    return b;
}

void matrice()
{
    log2[0]=log2[1]= 0;
    for(int i=2;i<=n;++i)
        log2[i] = log2[ i >> 1] + 1;
    for(int i=1;i<=log2[n]; ++i)
        for(int j=1; j+(1<<(i-1)) <= n; ++j)
            M[i][j] = minim ( M[i-1][j], M[i-1][j + (1<<(i-1))] );
}

int main()
{
    citire();
    int x,y,L;
    FILE *g=fopen("rmq.out","w");
    for(int i=1;i<=m;++i)
    {
        fscanf(f,"%d%d",&x,&y);
        L = log2[y-x+1];
        fprintf(g,"%d\n",minim(M[L][x],M[L][y - (1<<L) +1]));
    }
    fclose(f);
    fclose(g);
    return 0;
}