Cod sursa(job #1710233)

Utilizator denniscrevusDennis Curti denniscrevus Data 28 mai 2016 17:59:44
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>
#define LOG 18
#define NMAX 100002

using namespace std;

int n,m,i,lg1[NMAX],rmq[LOG][NMAX],j,v[NMAX],nr, x, y, sf, dif, lg;

int main()
{
    ifstream f("rmq.in");
    ofstream g("rmq.out");

    f>>n>>m;

    for(i=1;i<=n;i++)
        f>>v[i];

    lg1[1]=0;

    for(i=2;i<=n;i++)
        lg1[i] = lg1[i/2]+1;

    for(i=1;i<=n;i++)
            rmq[0][i]=v[i];

    for(i=1;(1<<i)<=n;i++)
        for(j=1;j<=n-(1<<i)+1;j++)
        {
            nr = 1<<(i-1);
            rmq[i][j] = min(rmq[i-1][j],rmq[i-1][j+nr]);
        }

    for(i=1;i<=m;i++)
    {
        f>>x>>y;
        dif=y-x+1;
        lg=lg1[dif];
        sf = dif - (1<<lg);
        g<<min(rmq[lg][x],rmq[lg][x+sf])<<"\n";
    }

}