Cod sursa(job #3226764)

Utilizator raileanu-alin-gabrielRaileanu Alin-Gabriel raileanu-alin-gabriel Data 22 aprilie 2024 19:13:27
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>
const int NMAX=100005;

using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");

int query(int, int);

int rmq[20][NMAX], pw[NMAX];
int n, q;

int main()
{
    int p=0, i, j, a, b;
    cin>>n>>q;
    for(i=1; i<=n; i++)
    {
        cin>>rmq[0][i];
        if((1<<(p+1))==i) p++;
        pw[i]=p;
    }
    for(j=1; (1<<j)<=n; j++)
    {
        for(i=1; i<=n-(1<<j)+1; i++)
        {
            rmq[j][i]=min(rmq[j-1][i], rmq[j-1][i+(1<<(j-1))]);
        }
    }
    while(q--)
    {
        cin>>a>>b;
        cout<<query(a, b)<<'\n';
    }
    return 0;
}

int query(int a, int b)
{
    int p=pw[b-a+1];
    return min(rmq[p][a], rmq[p][b-(1<<p)+1]);
}