Cod sursa(job #1054001)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 13 decembrie 2013 09:47:36
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include<fstream>
#define dim 100006
using namespace std;

ifstream f("rmq.in");
ofstream g("rmq.out");
int rmq[20][dim];
int p[dim];
int n,Q,x,y,i,j;
inline int minim(int a,int b){
    if(a<b)
        return a;
    return b;
}
int main () {
 
    f>>n>>Q;
 
    for(i=1;i<=n;++i){
        f>>rmq[0][i];
 
    }
    for(i=2;i<=dim;++i){
        p[i]=p[i/2]+1;
    }
    for(i=1;(1<<i)<=n ;++i ) {
 
 
        for(j=1;j+(1<<i) -1<=n;++j){
 
            rmq[i][j] =minim(rmq[i-1][j] ,rmq[i-1][j+(1<<(i-1))]);
        }
 
    }
 
 
    for(i=1;i<=Q;++i) {
        f>>x>>y;
 
        int H=p[y-x+1];
        g<<min(rmq[H][x],rmq[H][y-(1<<H)+1])<<"\n";
 
    }
    return 0;
}