Cod sursa(job #2013608)

Utilizator Alex18maiAlex Enache Alex18mai Data 21 august 2017 21:04:50
Problema Range minimum query Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
#include <math.h>

using namespace std;

ifstream  cin ("rmq.in");
ofstream  cout ("rmq.out");

int A[100100];
int dp[100100][20];

int main() {
    int n, m;
    cin>>n>>m;
    for (int i=1; i<=n; i++){
        cin>>A[i];
    }
    for (int i=1; i<=n; i++){
        dp[i][0] = A[i];
    }
    for (int i=n; i>=1; i--){
        for (int j=1; pow(2, j) <= n - i + 1; j++){
            dp[i][j] = min(dp[i][j-1], dp[i + (int)pow(2, j-1)][j-1]);
            //cout<<i<<" "<<j<<" "<<dp[i][j-1]<<" "<<dp[i + (int)pow(2, j-1)][j-1]<<'\n';
        }
    }
    /*cout<<'\n';
    for (int i=1; i<=n; i++){
        for (int j=0; pow(2, j) <= n - i + 1; j++){
            cout<<dp[i][j]<<" ";
        }
        cout<<'\n';
    }
    cout<<'\n';*/
    for (int i=1; i<=m; i++){
        int a, b;
        cin>>a>>b;
        int d = b - a + 1;
        int l = (int)log2(d);
        cout<<min(dp[a][l], dp[b-l][l])<<'\n';
    }
    return 0;
}