Cod sursa(job #2812983)

Utilizator Gabriel_DascalescuGabriel Dascalescu Gabriel_Dascalescu Data 5 decembrie 2021 16:20:47
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#define nmax 100005
#define matmax 18

using namespace std;

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

int lg[nmax], v[nmax], doi[nmax];

int d[matmax][nmax];

int n, m, a, b;

int main()
{
    doi[0] = 1;
    for(int i=1; i<matmax; i++)
    {
        doi[i] = 2 * doi[i-1];
    }
    in>>n>>m;
    for(int i=2; i<=n; i++)
    {
        lg[i] = lg[i/2] + 1;
    }
    for(int i=1; i<=n; i++)
    {
        in>>v[i];
        d[0][i] = v[i];
    }
    for(int i=1; i<matmax; i++)
    {
        for(int j=1; j<= n -doi[i] + 1; j++)
        {
            d[i][j] = min(d[i-1][j], d[i-1][j+doi[i-1]]);
        }
    }
    for(int i=1; i<=m; i++)
    {
        in>>a>>b;
        out<< min(d[lg[b-a +1 ]][a + (b - a+1 - doi[lg[b-a + 1]])], d[lg[b-a+1]][a] )<<"\n";
    }
    return 0;
}