Cod sursa(job #1261170)

Utilizator andreismara97Smarandoiu Andrei andreismara97 Data 12 noiembrie 2014 00:13:59
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");

#define NMAX 100005

int D[20][NMAX], lg[NMAX];
int N,M,i,j;
int x,y,k;

void citire()
{
    in>>N>>M;
    for(i=1;i<=N;i++)
        in>>D[0][i];
}

int main()
{

    citire();

    lg[1]=0;
    for(i=2;i<=N;i++)
        lg[i]=lg[i/2]+1;

    for(i=1;i<=lg[N];i++)
        for(j=1;j<=N-(1<<(i-1));j++)
            D[i][j]=min(D[i-1][j],D[i-1][j+(1<<(i-1))]);

    for(i=1; i<=M; i++)
    {
        in>>x>>y;
        k=lg[y-x+1];
        out<<min(D[k][x],D[k][y-(1<<k)+1])<<'\n';
    }

    return 0;
}