Cod sursa(job #1135993)

Utilizator gabrielinelusGabriel-Robert Inelus gabrielinelus Data 8 martie 2014 17:42:48
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <cstdio>
#include <algorithm>
#include <cmath>

using namespace std;
int DP[18][200005],N,M,a,b;

inline void read()
{
    scanf("%d%d",&N,&M);
    for(int i = 1; i <= N; ++i)
        scanf("%d",&DP[0][i]);
}

inline void RMQ()
{
    int gap = 1;
    for(int i = 1; i <= 17; ++i)
    {
        for(int j = 1; j <= N; ++j)
            DP[i][j] = min(DP[i-1][j],DP[i-1][j+gap]);
        gap *= 2;
    }
}

inline void Querry(int a,int b)
{
    int line = log2(b-a+1);
    printf("%d\n",min(DP[line][a],DP[line][b + 1-(1<<line)]));
}

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

    read();
    RMQ();
    for(int i = 1; i <= M; ++i)
    {
        scanf("%d%d",&a,&b);
        Querry(a,b);
    }
    return 0;
}