Cod sursa(job #2593076)

Utilizator filipinezulDumitrascu Filip Teodor filipinezul Data 2 aprilie 2020 20:14:36
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#include <fstream>
using namespace std;

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

const int N=100001 ;

int rmq[17][N];
int log[N];


int main()
{
    int n,m;
    in>>n>>m;

    for (int i=1; i<=n; i++)
    {
        in>>rmq[0][i];
    }

    log[1]=0;

    for(int i=2; i<=n; i++)
    {
        log[i]=1+log[i/2];
    }

    for (int i=1; i<=log[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]);
        }
    }
    for(int i=0; i<m; i++)
    {
        int a,b;
        in>>a>>b;

        int l=log[b-a+1];
        out<< min(rmq[l][a+(1<<l)-1],rmq[l][b])<<"\n";
    }

    return 0;
}