Cod sursa(job #1497293)

Utilizator refugiatBoni Daniel Stefan refugiat Data 6 octombrie 2015 17:10:11
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<fstream>
#include<algorithm>
#include<cmath>
#include<iostream>
using namespace std;
#define NMAX 100005
#define LMAX 20
int rmq[LMAX][NMAX],lg[NMAX];
int minn(int a,int b)
{
    int put=lg[b-a+1];
    return min(rmq[put][a],rmq[put][b-(1<<put)+1]);
}
int main()
{
    ifstream si;
    si.open("rmq.in");
    ofstream so;
    so.open("rmq.out");
    int n,m;
    si>>n>>m;
    int i,j;
    for(i=1;i<=n;++i)
    {
        si>>rmq[0][i];
    }
    for(i=2;i<=n;++i)
        lg[i]=lg[i/2]+1;
    for(i=1;i<LMAX;++i)
    {
        for(j=1;j+(1<<i-1)-1<=n;++j)
        {
            rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+(1<<i-1)]);
        }
    }
    int a,b;
    for(i=0;i<m;++i)
    {
        si>>a>>b;
        so<<minn(a,b)<<'\n';
    }
    si.close();
    so.close();
    return 0;
}