Cod sursa(job #2624659)

Utilizator @stefansevastre@Stefan Sevastre @stefansevastre@ Data 5 iunie 2020 02:49:29
Problema Range minimum query Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.67 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

int n,m,i,j,p,a[50][100000];

int main()
{
    f>>n>>m;
    for(i=1; i<=n; i++)
        f>>a[0][i];
    for(i=1; (1<<i)<=n; i++)
        for(j=1; j<=n; j++)
            a[i][j]=min(a[i-1][j], a[i-1][j+(1<<(i-1))]);    /// a[i][j] = minimul pe intervalul [j, j + 2 ^ i]

    while(m)
    {
        f>>i>>j;

        p=0;
        while((1<<p)<=j+1-i)
            p++;
        p--;    /// aflam p astef incat 2 ^ p < lungimea intervalului, p - maxim posibil
        g << min(a[p][i], a[p][j+1-(1<<p)])<<endl;

        m--;
    }


    return 0;
}