Cod sursa(job #1800077)

Utilizator eragon0502Dumitrescu Dragos eragon0502 Data 7 noiembrie 2016 11:59:46
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <cstdio>

using namespace std;

int d[100005][17];
int log[100005];
int minz(int a,int b) {
    if(a<b)
        return a;
    return b;
}

int main() {
    freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);
    int n,q,i,j,a,b;
    scanf("%d %d",&n,&q);
    for(i=1; i<=n; ++i)
        scanf("%d",&d[i][0]);
    /*for(j=1; (1<<j)<=n; j++)
        for(i=(1<<(j-1))+1; i<=n; ++i)*/
    for(i=1;i<=n;++i)
            for(j=1;(1<<j)<=i;++j){
                d[i][j]=minz(d[i][j-1],d[i-(1<<(j-1))][j-1]);
            }
    log[1]=0;
    for(i=2; i<=n; ++i)
        log[i]=1+log[i/2];
    for(i=1; i<=q; ++i) {
        scanf("%d %d",&a,&b);
        printf("%d\n",minz(d[b][log[b-a+1]],d[a+(1<<log[b-a+1])-1][log[b-a+1]]));
    }
    return 0;
}