Cod sursa(job #1443021)

Utilizator horiainfoTurcuman Horia horiainfo Data 26 mai 2015 17:47:44
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>
#include <cmath>
#define NMAX 100000
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
long long n,m,power2,i,j,k,inc,sf;
int a[NMAX],mat[NMAX+1][20];
int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        fin>>a[i];
    }
    for(i=1;i<=n;i++)
        mat[i][0]=i;
    for(j=1; (1<<j) <n;j++)
    {
        power2=(1<<j);
        for(i=1;i<=n-power2+1;i++)
            if(a[mat[i][j-1]]<=a[mat[i+power2/2][j-1]])
                mat[i][j]=mat[i][j-1];
            else
                mat[i][j]=mat[i+power2/2][j-1];
    }
    for(i=1;i<=m;i++)
    {
        fin>>inc>>sf;
        k= log2 (sf-inc+1);
        if(a[mat[inc][k]]<=a[mat[sf-(1<<k)+1][k]])
            fout<<a[mat[inc][k]];
        else
            fout<<a[mat[sf-(1<<k)+1][k]];
        fout<<'\n';
    }
    return 0;
}