Cod sursa(job #2058679)

Utilizator FredyLup Lucia Fredy Data 5 noiembrie 2017 23:46:42
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.59 kb
#include <fstream>

using namespace std;

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

#define lim 100010
int n,m,x,y,l;
int rmq[lim][17],lg[lim];

int main()
{
    fin>>n>>m;
    for (int i=1; i<=n; i++) fin>>rmq[i][0];
    for (int i=2; i<=n; i++) lg[i]=lg[i>>1]+1;

    for (int k=1; (1<<k)<=n; k++)
        for (int j=1; j+(1<<k)-1<=n; j++)
            rmq[j][k] = min (rmq[j][k-1], rmq[j+(1<<(k-1))][k-1]);

    while (m--)
    {
        fin>>x>>y;
        l=lg[y-x+1];
        fout<<min(rmq[x][l],rmq[y-(1<<l)+1][l])<<'\n';
    }
    fout.close();
    return 0;
}