Cod sursa(job #1435166)

Utilizator tudor00Stoiean Tudor tudor00 Data 12 mai 2015 12:35:33
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>
#include <iostream>

using namespace std;

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

int n,m,i,j,a,b;

int d[19][100010];
int lg[100010];
int main() {
    in>>n>>m;
    for (i=1;i<=n;i++)
        in>>d[0][i];
    for(i=1;(1<<i)<=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=0;(1<<i)<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            out<<d[i][j]<<" ";
        }
        out<<'\n';
    }
*/

    for(i=2 ; i<=n ; ++i)
        lg[i] = lg[i/2]+1;
    for(i=1;i<=m;i++)
    {
        in>>a>>b;
        int dim=b-a+1;
        int lin=lg[dim];
        out<<min(d[lin][a],d[lin][b-(1<<lin)+1])<<'\n';
    }
    return 0;
}