Cod sursa(job #1679614)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 8 aprilie 2016 09:11:03
Problema Range minimum query Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.71 kb
#include <stdio.h>
#define  nmax 1000005
#define logn 17
int r[nmax][logn],log[nmax];
int min(int a,int b){
    if(a<b)
        return a;
    return b;
}
int main(){
    FILE *fin,*fout;
    fin=fopen("rmq.in","r");
    fout=fopen("rmq.out","w");
    int i,j,n,m,l,rasp,a,b;
    fscanf(fin,"%d%d",&n,&m);
    for(i=2;i<=nmax;i++)
        log[i]=1+log[i/2];
    for(i=1;i<=n;i++){
        fscanf(fin,"%d",&r[i][0]);
        for(j=1;(1<<j)<=i;j++)
            r[i][j]=min(r[i][j-1],r[i-(1<<(j-1))][j-1]);
    }
    for(i=1;i<=m;i++){
        fscanf(fin,"%d%d",&a,&b);
        l=log[b-a+1];
        rasp=min(r[b][l],r[a+(1<<l)-1][l]);
        fprintf(fout,"%d\n",rasp);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}