Cod sursa(job #968063)

Utilizator NohaiClaudiuNohai Claudiu NohaiClaudiu Data 1 iulie 2013 11:01:03
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#include <cmath>
#include <vector>
using namespace std;

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

vector <int> d[17];
int n, m, q1, q2, k, z, di=1;

int mint(int x, int y){
 return x<y?x:y;
}

int main(){
    f>>n>>m;
    d[0].push_back(0);
    for (int i=1;i<=n;++i){
        f>>k;
        d[0].push_back(k);
    }
    z=(int)log2(n);
    //g<<z<<'\n';
    for (int i=1;i<=z;++i){
        d[i].push_back(0);
        for (int j=1;j<=n+1-(1<<i);++j){
            k=mint(d[i-1][j], d[i-1][j+(1<<(i-1))]);
            d[i].push_back(k);
            //g<<k<<' ';
        }
        //g<<'\n';
    }
    //g<<"\n\n";
    for (int i=1;i<=m;++i){
        f>>q1>>q2;
        k=q2-q1+1;
        z=(int)log2(k);
        //g<<"z="<<z<<'\n';
        g<<mint(d[z][q1], d[z][q2-(1<<(z))+1])<<'\n';
    }
    g.close();
    return 0;
}