Cod sursa(job #1977875)

Utilizator rares1012Rares Cautis rares1012 Data 6 mai 2017 13:11:31
Problema Range minimum query Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.74 kb
#include <stdio.h>
#include <stdlib.h>

int v[100000][18];

int log[100001];

int min(int a,int b){
    if(a>b)
        return b;
    return a;
}

int main()
{
    int n,m,i,j,x,y,dif,rez;
    FILE*fi,*fo;
    fi=fopen("rmq.in","r");
    fo=fopen("rmq.out","w");
    fscanf(fi,"%d%d",&n,&m);
    for(i=0;i<n;i++){
        fscanf(fi,"%d",&v[i][0]);
        for(j=1;(1<<j)<=i+1;j++)
        {
            v[i][j]=min(v[i-(1<<(j-1))][j-1],v[i][j-1]);
        }
    }
    for(i=2;i<=100000;i++)
        log[i]=1+log[i/2];
    for(i=0;i<m;i++){
        fscanf(fi,"%d%d",&x,&y);
        x--;
        y--;
        dif=log[y-x+1];
        rez=min(v[x+(1<<dif)-1][dif],v[y][dif]);
        fprintf(fo,"%d\n",rez);
    }
    fclose(fi);
    fclose(fo);
    return 0;
}