Cod sursa(job #1471785)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 15 august 2015 10:12:04
Problema Range minimum query Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.8 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100000
#define LOGN 17
int v[MAXN],mat[MAXN][LOGN+1];
inline int min(int a,int b){
    if(a>b) return b;
    return a;
}
int main(){
    FILE*fi,*fout;
    int a,b,i,j,n,m,x;
    fi=fopen("rmq.in" ,"r");
    fout=fopen("rmq.out" ,"w");
    fscanf(fi,"%d%d" ,&n,&m);
    for(i=0;i<n;i++)
        fscanf(fi,"%d" ,&v[i]);
    for(i=0;i<n;i++)
       mat[i][0]=v[i];
    for(j=1;j<=LOGN;j++)
        for(i=0;i<n-(1<<j)+1;i++)
            mat[i][j]=min(mat[i][j-1],mat[i+(1<<j-1)][j-1]);
    for(i=0;i<m;i++){
        fscanf(fi,"%d%d" ,&a,&b);
        j=0;
        while((1<<j)+a-1<=b)
            j++;
        j--;
        fprintf(fout,"%d\n" ,min(mat[a-1][j],mat[b-(1<<j)][j]));
    }
    fclose(fi);
    fclose(fout);
    return 0;
}