Cod sursa(job #1894053)

Utilizator Burbon13Burbon13 Burbon13 Data 26 februarie 2017 14:02:06
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <cstdio>
#include <cmath>
#include <iostream>

using namespace std;

const int nmx = 100002;

int n,q,dp[nmx][18];

void citire()
{
    scanf("%d %d", &n, &q);
    for(int i = 1; i <= n; ++i)
        scanf("%d", &dp[i][0]);
}

void dinamica()
{
    for(int pt = 1; 1 << pt <= n; ++pt)
    {
        for(int i = 1; i <= n - (1<<pt) + 1; ++i)
            dp[i][pt] = min(dp[i][pt-1],dp[i+(1<<(pt-1))][pt-1]);
    }

}

void teste()
{
    for(int i = 1; i <= q; ++i)
    {
        int a,b;
        scanf("%d %d", &a, &b);

        int pt = (int) log2(b-a+1);

        printf("%d\n", min(dp[a][pt],dp[b-(1<<pt)+1][pt]));
    }
}

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