Cod sursa(job #1242522)

Utilizator refugiatBoni Daniel Stefan refugiat Data 14 octombrie 2014 16:41:16
Problema Range minimum query Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include <iostream>
#include <fstream>

#define DN 100005
using namespace std;

ifstream si("rmq.in");
ofstream so("rmq.out");
int rmq[DN][25];
int find(int a,int b)
{
    int p=0;
    for(;a+(1<<p)<=b;++p);
    --p;
    p=max(p,0);
    return min(rmq[a][p],rmq[b-(1<<p)+1][p]);
}
int main()
{
    int n,m;
    si>>n>>m;
    int i;
    for(i=1;i<=n;++i)
        si>>rmq[i][0];
    int p;
    for(p=1;p<=18;++p)
        for(i=1;i+(1<<(p-1))<=n;++i)
            rmq[i][p]=min(rmq[i][p-1],rmq[i+(1<<(p-1))][p-1]);
    int a,b;
    for(i=0;i<m;++i)
    {
        si>>a>>b;
        so<<find(a,b)<<endl;
    }
}