Cod sursa(job #1639725)

Utilizator zertixMaradin Octavian zertix Data 8 martie 2016 13:43:04
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <bits/stdc++.h>

using namespace std;

int n,m,RMQ[20][100005],lg[100005];

void rmq()
{
    for (int i=2;i<=n;++i)
        lg[i]=lg[i>>1]+1;
    for (int i=1;(1<<i)<n;++i)
        for (int j=1;j<=n-(1<<(i-1));++j)
            RMQ[i][j]=min(RMQ[i-1][j],RMQ[i-1][j+1]);
}

void citire()
{
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;++i)
        scanf("%d",&RMQ[0][i]);
    rmq();
    int a,b;
    for (int i=1;i<=m;++i)
    {
        scanf("%d%d",&a,&b);
        int l=lg[b-a+1];
        int minc;

        minc=min(RMQ[l][a],RMQ[l][b+1-(1<<l)]);
        printf("%d\n",minc);
    }
}

int main()
{
    freopen("rmq.in","r",stdin);
    freopen("rmq.out","w",stdout);
    citire();
    return 0;
}