Cod sursa(job #2355462)

Utilizator cristii2000cristiiPanaite Cristian cristii2000cristii Data 26 februarie 2019 09:12:29
Problema Range minimum query Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

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

const int NMAX = 100005;
const int LNMAX = (int) log10(NMAX) + 10;

int n, q;
int dp[LNMAX][NMAX];


int main()
{
    ios::sync_with_stdio(false);
    in >> n >> q;
    for(int i=0; i<n; ++i)
        in >> dp[0][i];

    for(int i=1; (1<<i)<=n; ++i)
        for(int j=0; j+(1<<(i-1))<n; ++j)
            dp[i][j] = min(dp[i-1][j], dp[i-1][j+(1<<(i-1))]);

    for(int i=0; i<q; ++i)
    {
        int x, y;
        in >> x >> y;
        --x, --y;
        int k =log2(y-x+1);
        out<<min(dp[k][x], dp[k][y-(1<<k)+1])<<"\n";
    }
    return 0;
}