Cod sursa(job #1710226)

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

using namespace std;

int n,m,i,log[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];

    log[1]=0;

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

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

    for(i=1;i/2<=n;i++)
        for(j=1;j<=n-i/2+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=log[dif];
        sf = dif - (1<<lg);
        g<<min(rmq[lg][x],rmq[lg][x+sf])<<"\n";
    }

}