Cod sursa(job #2204390)

Utilizator daniel.vbVasile Daniel daniel.vb Data 15 mai 2018 17:43:53
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 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;2*q<=n;p++,q*=2)
        for(i=1;i+2*q-1<=n;i++)
            if(a[i][p-1]<a[i+q][p-1])
                a[i][p]=a[i][p-1];
            else
                a[i][p]=a[i+q][p-1];


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

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