Cod sursa(job #1687355)

Utilizator Cezar_MihalceaCezar Mihalcea Cezar_Mihalcea Data 12 aprilie 2016 20:02:33
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include<fstream>
using namespace std;

ifstream f("rmq.in");
ofstream g("rmq.out");

int r[100001][18],v[1000001],log[100001],n,m;

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

void pre_log()
{
    int i;
    log[1]=0;
    for(i=2;i<=n;i++)
    {
        log[i]=1+log[i/2];
    }
}

void pre_mat()
{
    int i,j;
    for(i=1;i<=n;i++)
    {
        r[i][0]=v[i];
        for(j=1;(1<<j)<=i;j++)
            r[i][j]=minim(r[i][j-1], r[i-(1<<(j-1))][j-1]);
    }
}

int sol(int a,int b)
{
    int l=log[b-a+1];
    return minim(r[b][l], r[a+(1<<l)-1][l]);
}

int main()
{
    int i,x,y;
    f>>n>>m;
    for(i=1;i<=n;i++)
        f>>v[i];
    pre_log();
    pre_mat();
    for(i=1;i<=m;i++)
    {
        f>>x>>y;
        g<<sol(x,y)<<"\n";
    }
    return 0;
}