Cod sursa(job #1747148)

Utilizator VladTiberiuMihailescu Vlad Tiberiu VladTiberiu Data 24 august 2016 16:12:00
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <bits/stdc++.h>

#define NMax 100005
#define INF 0x3f3f3f3f
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");

int n,m,x,y,diff;
int a[NMax],LG[NMax];
int rmq[20][NMax];

int main()
{
    f >> n >> m;
    memset(rmq,INF,sizeof(rmq));
    for(int i = 1; i <= n; ++i){
        f >> a[i];
        rmq[0][i] = a[i];
    }

    LG[1] = 0;
    for(int i = 2; i <= n; ++i){
        LG[i] = LG[i / 2] + 1;
    }
    for(int i = 1; (1<<i) <= n; ++i){
        for(int j = 1; j <= n; ++j){
            rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j - (1 << (i - 1))]);
        }
    }
    for(int i = 1; i <= m; ++i){
        f >> x >> y;
        diff = LG[y - x + 1];
        g << min(rmq[diff][y], rmq[diff][y - (1 << diff) + 1]) << '\n';
    }
    return 0;
}