Cod sursa(job #1563986)

Utilizator AetheryonStefan Bereghici Aetheryon Data 7 ianuarie 2016 17:21:23
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.62 kb
#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
const char* IN = "rmq.in";
const char* OUT = "rmq.out";
const int MAX_SIZE = 100013;

int n,m,l,r;
int RMQ[17][MAX_SIZE];
int main(void){
    ifstream cin(IN);
    ofstream cout(OUT);
    cin>>n>>m;
    for (int i=1;i<=n;++i)
        cin>>RMQ[0][i];

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

    while(m--){
        cin>>l>>r;
        int k = (int)log2(r-l+1);
        cout<<min(RMQ[k][l],RMQ[k][r-(1<<k)+1])<<endl;
    }
    return 0;
}