Cod sursa(job #1877116)

Utilizator UrsuDanUrsu Dan UrsuDan Data 12 februarie 2017 22:57:52
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <cstdio>

using namespace std;

int range[100010][17];
int v[100010];
int log[100010];

int minim(int x,int y)
{
    if(x<y)
        return x;
    else
        return y;
}

int main()
{
    freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);
    int n,m,i,x,y,step,over;
    scanf("%d%d",&n,&m);
    for(i=1; i<=n; i++)
    {
        scanf("%d",&v[i]);
        range[i][0]=v[i];
    }
    for(step=1; step<=16; step++)
        for(i=1; i+(1<<step)-1<=n; i++)
            range[i][step]=minim(range[i][step-1],range[i+(1<<(step-1))][step-1]);
    for(i=1;i<=n;i++)
    {
        for(step=0;step<=4;step++)
            printf("%d ",range[i][step]);
        printf("\n");
    }
    log[1]=0;
    for(i=2; i<=n; i++)
        log[i]=log[i/2]+1;
    for(i=1; i<=m; i++)
    {
        scanf("%d%d",&x,&y);
        over=y-x+1;
        printf("%d\n",minim(range[x][log[over]],range[y-(1<<log[over])+1][log[over]]));
    }
    return 0;
}