Cod sursa(job #2204350)

Utilizator daniel.vbVasile Daniel daniel.vb Data 15 mai 2018 16:06:46
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <stdio.h>
#include <math.h>


unsigned n,m,a[100005][18];
/*
int l2(int i)
{
    int j=0;
    while(i>1){
        j++;
        i=i/2;
    }
    return j;
}
*/


int main()
{
    unsigned i,j,k,p,q;
    FILE *f,*g;

    f=fopen("rmq.in","r");
    g=fopen("rmq.out","w");

    fscanf(f,"%d%d",&n,&m);



    for (i=1;i<=n;i++)
        fscanf(f,"%d",&a[i][0]);


    for(p=1,q=1;q<n;p++,q*=2)
        for(i=1;i<=n-p;i++)
            if(a[i][p-1]<a[i+1][p-1])
                a[i][p]=a[i][p-1];
            else
                a[i][p]=a[i+1][p-1];


    for(k=1;k<=m;k++)
    {
        fscanf(f,"%d%d",&i,&j);
        p=log2(j-i)+1;q=1<<p-1;

        if(i==j)
            printf("%d\n",a[i][0]);
        else
            fprintf(g,"%d\n",a[i][p]<a[j-q][p]?a[i][p]:a[j-q][p]);
    }
}