Cod sursa(job #1910777)

Utilizator B_RazvanBaboiu Razvan B_Razvan Data 7 martie 2017 18:13:43
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>

using namespace std;
int n, m, dp[100005][20], minimInterval;

void completareMatrice()
{
    int logar=log2(n);
    for(int j=1; j<=logar; ++j)
        for(int i=1; i<=n; ++i)
            if(i+1<<(j-1)<=n)
                dp[i][j]=min(dp[i][j-1], dp[i+1<<(j-1)][j-1]);
            else
                dp[i][j]=dp[i][j-1];
}

void gasireMinim(int x, int y)
{
    int lungime=y-x+1;
    int aux=(int)log2(lungime);
    minimInterval=min(dp[x][aux], dp[y-(1<<aux)+1][aux]);
}

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

    completareMatrice();

    int x, y;
    for(int i=1; i<=m; ++i)
    {
        scanf("%d%d", &x, &y);
        gasireMinim(x, y);
        printf("%d\n", minimInterval);
    }
}

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