Cod sursa(job #2284674)

Utilizator CronosClausCarare Claudiu CronosClaus Data 17 noiembrie 2018 12:32:26
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <bits/stdc++.h>

using namespace std;

const int mxn = 100 * 1000 + 10;
const int mxp = 20;

int rmq[ mxp ][ mxn ];

int n, m;

int pmx;

int main()
{
    ios_base::sync_with_stdio( false );
    cin.tie( 0 );
    ifstream cin("rmq.in");
    ofstream cout("rmq.out");
    cin>> n >> m;
    for(int i = 1, x; i <= n; i++){
        cin>> x;
        rmq[ 0 ][ i ] = x;
    }
    for(int p = 1; (1 << p) < n; p++){
        pmx = (1 << p);
        for(int j = 1; j + p <= n; j++){
            rmq[ p ][ j ] = min(rmq[ p - 1 ][ j ], rmq[ p - 1 ][ j + (1 << (p - 1)) ]);
        }
    }
    for(int i = 1, x, y; i <= m; i++){
        cin>> x >> y;
        int p = log2(y - x + 1);
        cout<< min(rmq[ p ][ x ], rmq[ p ][ y - (1 << p) + 1] )<< '\n';
    }
}