Cod sursa(job #2284657)

Utilizator Urdoi.BogdanUrdoi Bogdan Urdoi.Bogdan Data 17 noiembrie 2018 12:20:41
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <bits/stdc++.h>

using namespace std;

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

int RMQ[20][100001], n, m;

int minInterval(int x, int y)
{
    int c = 1, p = 0, fin=y-x;
    while(c <= fin) c*=2, p++;
    p--, c/=2;
    return min(RMQ[p][x], RMQ[p][y-c+1]);
}

void createRmq()
{
    bool OK = true;
    for(int i = 1; i <= n && OK; i++)
        for(int j = 1; j <= m && OK; j++){
            int d = j+pow(2.00, i);
            if(d > n+1){
                OK = false;
                break;
            }
            RMQ[i][j]=minInterval(j, d-1);
        }
}

int main()
{
    int x, y;
    f >> n >> m;
    for(int i = 1; i <= n; i++)
        f >> RMQ[0][i];
    createRmq();
    for(int i = 1; i <= m; i++){
        f >> x >> y;
        g << minInterval(x, y) << "\n";
    }
    return 0;
}