Cod sursa(job #780124)

Utilizator stefanzzzStefan Popa stefanzzz Data 19 august 2012 22:18:51
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <fstream>
#include <math.h>
#define MAXN 100005
#define log2_MAXN 20
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");

long n,m,v[MAXN],x,y,l2,mn[MAXN][log2_MAXN];

long minim(long a,long b){
    return a<b?a:b;}

int main()
{
    long i,j;
    f>>n>>m;
    for(i=1;i<=n;i++)
        f>>v[i];
    for(i=1;i<=n;i++)
        mn[i][0]=v[i];
    for(j=1;(1<<j)<=n;j++){
        x=1<<j;
        for(i=1;i+x-1<=n;i++)
            mn[i][j]=minim(mn[i][j-1],mn[i+(x>>1)][j-1]);}
    for(i=1;i<=m;i++){
        f>>x>>y;
        l2=floor(log2((double)(y-x+1)));
        g<<minim(mn[x][l2],mn[y-(1<<l2)+1][l2])<<'\n';}
    f.close();
    g.close();
    return 0;
}