Cod sursa(job #1958394)

Utilizator CriistinaMicula Cristina Criistina Data 8 aprilie 2017 12:50:05
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <iostream>
#include <fstream>
#define Nmax 100001

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

int n, m, l[Nmax], secv[Nmax][20], s[Nmax];

int main()
{
    f>>n>>m;
    for(int i=1;i<=n;i++){
        f>>s[i];
        secv[i][0]=s[i];
    }
    l[1]=0;
    for(int i=2;i<=n;i++)
        l[i]=l[i/2]+1;
    for(int i=1;i<=l[n];i++)
    {
        for(int j=1;j<=n && j+(1<<i)-1<=n;j++)
        {
            secv[j][i]=min(secv[j][i-1], secv[j+(1<<(i-1))][i-1]);
        }
    }
    for(int i=1;i<=m;i++)
    {
        int x,y;
        f>>x>>y;
        int k=l[y-x+1];
        g<<min(secv[x][k], secv[y-(1<<k)+1][k])<<'\n';
    }
    return 0;
}