Cod sursa(job #1762355)

Utilizator bogdi1bogdan bancuta bogdi1 Data 23 septembrie 2016 14:42:18
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include <cstdio>
using namespace std;
int r[100005][20];
int logx[100005];
int minn(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,m,i,x,j,a,b,L;
    scanf("%d%d", &n, &m);
    for(i=1; i<=n; i++){
        scanf("%d", &x);
        r[i][0]=x;
        for(j=1; (1<<j)<=i; j++)
            r[i][j]=minn(r[i][j-1], r[i-(1<<(j-1))][j-1]);
    }
    logx[1]=0;
    for(i=2; i<=n; i++)
        logx[i]=1+logx[i/2];
    for(i=1; i<=m; i++){
        scanf("%d%d", &a, &b);
        L=logx[b-a+1];
        printf("%d\n", minn(r[b][L], r[a+(1<<L)-1][L]));
    }
    return 0;
}