Cod sursa(job #1510893)

Utilizator Y0da1NUME JMECHER Y0da1 Data 25 octombrie 2015 18:45:09
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
//#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int rmq [18][100002];
int m, n;
int v[100002];
int main()
{
    ifstream in ("rmq.in");
    ofstream out ("rmq.out");
    in>>n>>m;
    int i, j, l, x, y, dif, interval;
    for(i=1;i<=n;i++)
        in>>rmq[0][i];

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

    for (i=1; (1 << i) <=n;i++)
        for (j=1;j <= n - (1 << i)+1;j++)
        {
        l=1<<(i-1);
        rmq[i][j]= min( rmq[i-1][j] , rmq[i-1][j+l] );
        }
        for (i=1;i<=m;i++)
        {
            in>>x>>y;
            dif=y-x+1;
            l=v[dif];
            interval=dif-(1<<l);
            out<<min(rmq[l][x],rmq[l][x+interval])<<"\n";
        }
        in.close();
        out.close();
        return 0;

}