Cod sursa(job #2593073)

Utilizator AlbertoManfredaManfreda Carlo Alberto AlbertoManfreda Data 2 aprilie 2020 20:10:10
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>

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

int rmq[17][100001],log[100001],n,m,v[100001];

int interogare(int x, int y)
{
    int l=log[y-x+1];
    return min(rmq[l][x+(1<<l)-1],rmq[l][y]);
}

int main()
{
    int i,j;
    f>>n>>m;
    for (int a=1; a<=n; a++)
    {
        f>>v[a];
        rmq[0][a] = v[a];
    }
    for (int i=1; (1 << i)<=n; i++)
        for (int j=1<<i; j<=n; j++)
        {
            rmq[i][j]=min(rmq[i-1][j-(1<<(i-1))],rmq[i-1][j]);
        }

    log[1] = 0;
    for (int i = 2; i <= n; i++)
    {
        log[i] = 1 + log[i/2];
    }
    for (int k = 0; k < m; k++)
    {
        f >> i >> j;
        g << interogare(i, j) << "\n";
    }
    return 0;
}