Cod sursa(job #1836657)

Utilizator Victor24Vasiesiu Victor Victor24 Data 28 decembrie 2016 15:51:26
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>
using namespace std;

int n, m, v[20][100005], i, d=2, lg[100005], q1, q2, j, p;

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

int main ()
{
    f>>n>>m;

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

    lg[1]=1;

    for (i = 2; i<=100004 ; i++)
    {
        lg[i]=lg[i/2] + 1;
    }

    for (i=2; i<=lg[n]; i++)
    {

        for (j=1; j<=n-d+1; j++)

        {
            v[i][j]=min(v[i-1][j], v[i-1][j+ (d / 2) ]);
        }


        d*=2;
    }

    for (i=1; i<=m; i++)
    {
        f>>q1>>q2;

        d=q2-q1+1;

        d=lg[d];

        p= 1<<(d-1) ;

        g<<min ( v[d][q1] , v[d][q2 -  p + 1 ] ) << '\n';

    }

    return 0;
}