Cod sursa(job #1892828)

Utilizator woogiefanBogdan Stanciu woogiefan Data 25 februarie 2017 12:08:26
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <iostream>
#include <fstream>
#define maxlg 20
#define maxn 100005

using namespace std;

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

int rmq[maxn][maxlg];

int main()
{
    int n , m;
    int lg[maxn];
    fin >> n >> m;
    for(int i = 2; i <= n; ++ i) lg[i] = lg[i/2] + 1;
    for (int i = 1 ; i <= n ; ++i) fin >> rmq[0][i];
    for (int k = 1 ; (1 << k) <= n ; ++k)
        for(int i = 1 ; i <= n ; ++i)
            rmq[k][i] = min(rmq[k-1][i] , rmq[k-1][i+(1 << (k - 1))]);
    for (int i = 1 ; i <= m ; ++i)
    {
        int a , b;
        fin >> a >> b;
        int k = lg[-a + b + 1];
        int sol = rmq[1][a];
        if(rmq[k][b - (1 << k) + 1] < sol) sol = rmq[k][b - (1 << k) + 1];
        fout << sol << '\n';
    }
    return 0;
}