Cod sursa(job #1197711)

Utilizator usermeBogdan Cretu userme Data 13 iunie 2014 14:56:00
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <cstdio>

FILE*f=fopen("rmq.in","r");
FILE*h=fopen("rmq.out","w");

int lg[100001],r[18][100001],v[100001];

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

int main(){
    int n,m,k=0;
    fscanf(f,"%d%d",&n,&m);
    for ( int i=1;i<=n;++i ){
        fscanf(f,"%d",&v[i]);
        if ( (2<<k)<=i )
            ++k;
        lg[i]=k;
        r[0][i]=v[i];
        for ( int j=1;j<=lg[i];++j )
            r[j][i]=min(r[j-1][i],r[j-1][i-(1<<(j-1))]);
    }
    for ( int i=1;i<=m;++i ){
        int x,y;
        fscanf(f,"%d%d",&x,&y);
        int L=lg[y-x+1];
        fprintf(h,"%d\n",min(r[L][y],r[L][x+(1<<L)-1]));
    }
    return 0;
}