Cod sursa(job #900634)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 28 februarie 2013 20:57:43
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<fstream>
#define dim 100006
using namespace std;
/*Daca tot ai intrat pe sursa mea macar sa inveti ceva frumos
IMNUL STELEI:
Sunt fericit
Si ma simt bine
Scopul vietii l-am gasit
Intalnindu-te pe tine
O Steaua ale
O Steaua ale
O Steaua ale
O Steaua ale
O Steaua aleeee !
*/

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;
}