Cod sursa(job #1760910)

Utilizator mihai2003LLL LLL mihai2003 Data 21 septembrie 2016 15:24:05
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <iostream>
#include <cstdio>


using namespace std;
int r[100001][17];
int log[100000];
int v[100000];
int main()
{
    freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);
    int n,m,i,j,a,b;
    scanf("%d %d",&n,&m);
    log[1]=0;
    for(i=2;i<=n;i++)
        log[i]=1+log[i/2];
    for(i=1;i<=n;i++)scanf("%d",&v[i]);
    for(i=1;i<=n;i++){
        r[i][0]=v[i];
        for(j=1;(1<<j)<=i;j++)
            r[i][j]=min(r[i-(1<<(j-1))][j-1],r[i][j-1]);
    }
    for(i=1;i<=m;i++){
        scanf("%d %d",&a,&b);
        int q,l;
        l=log[b-a+1];
        q=min(r[a+(1<<l)-1][l],r[b][l]);
        printf("%d\n",q);
    }
    return 0;
}