Cod sursa(job #1762375)

Utilizator andra1782Andra Alazaroaie andra1782 Data 23 septembrie 2016 14:49:21
Problema Range minimum query Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.74 kb
#include <stdio.h>
#include <stdlib.h>
int r[100000][20];
int log[100000];
int main(){
    FILE *fin=fopen("rmq.in","r");
    FILE *fout=fopen("rmq.out","w");
    int n,i,j,m,a,b,l,rez;


    fscanf(fin,"%d%d",&n,&m);
    for(i=1; i<=n; i++){
        fscanf(fin,"%d",&r[i][0]);
        for(j=1; (1<<j)<=i; j++){
            r[i][j]=r[i][j-1];
            if(r[i][j]>r[i-(1<<(j-1))][j-1])
                r[i][j]=r[i-(1<<(j-1))][j-1];
        }
    }
    for(i=2; i<=n; i++)
        log[i]=1+log[i/2];
    for(i=1; i<=m; i++){
        fscanf(fin,"%d%d",&a,&b);
        l=log[b-a+1];
        rez=r[b][l];
        if(rez>r[a+(1<<l)-1][l])
            rez=r[a+(1<<l)-1][l];
        fprintf(fout,"%d\n",rez);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}