Cod sursa(job #2172723)

Utilizator VladG26Ene Vlad-Mihai VladG26 Data 15 martie 2018 17:39:14
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <iostream>
#include <cstdio>
using namespace std;
int rmq[16][100005];
int log[100005];
int n,q;

int main()
{
    freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);
    scanf("%d%d",&n,&q);
    for(int i=1; i<=n; i++)
        scanf("%d",&rmq[0][i]);
    for(int i=1; i<=16; i++)
        log[1<<i]=i;
    for(int i=1; i<=100000; i++)
        if(log[i]==0)
            log[i]=log[i-1];
    for(int i=1; (1<<i)<=n; i++)
    {
        for(int j=1; j+(1<<(i-1))<=n; j++)
        {
            rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+(1<<(i-1))]);
        }
    }
    int st,dr;
    for(int i=1; i<=q; i++)
    {
        scanf("%d%d",&st,&dr);
        printf("%d\n",min(rmq[log[dr-st]][st],rmq[log[dr-st]][st+(1<<(log[dr-st]-1))]));
    }
    return 0;
}