Cod sursa(job #573634)

Utilizator andrey932Andrei andrey932 Data 6 aprilie 2011 14:10:41
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;

ifstream fin("rmq.in");
ofstream fout("rmq.out");

int n,m,a[100015],rmq[20][100015],k,i,j,x,y,p;

void preg_rmq() {
    for(i=0;i<n;i++) {
        rmq[0][i]=a[i];
    }
    for(j=1; (1<<j)<=n;j++) {
        for(i=0;i+ (1<<j)-1<n;i++) {
                rmq[j][i]=min(rmq[j-1][i],rmq[j-1][i+(1<<(j-1))]);
        }
    }
}

inline int query(int x, int y) {
k=(int) (log(y-x+1)/log(2));
return min(rmq[k][y- (1<<k) +1],rmq[k][x]);
}

int main()
{
    fin>>n>>m;
    for(i=0;i<n;i++) {
        fin>>a[i];
    }
    preg_rmq();
    for(i=1;i<=m;i++) {
        fin>>x>>y;
        fout<<query(x-1,y-1)<<"\n";
    }

    fout.close();
    return 0;
}