Cod sursa(job #1676136)

Utilizator GinguIonutGinguIonut GinguIonut Data 5 aprilie 2016 18:58:17
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
#include <string.h>
#include <vector>
#include <queue>
#include <limits.h>

#define nMax 100001
#define lgMax 19
#define pb push_back
#define INF INT_MAX
#define bit(i) i&(-i)
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, m;
int lg[nMax];
int rmq[lgMax][nMax];
void read()
{
    fin>>n>>m;

    for(int i=1;i<=n;i++)
        fin>>rmq[0][i];
}
void preproc()
{
    lg[1]=0;
    for(int i=2;i<=n;i++)
        lg[i]=lg[i/2]+1;
}
void solve()
{
    int a, b;

    for(int len=1;(1 << len)<=n;len++)
        for(int i=1;i+(1 << len)-1<=n;i++)
            rmq[len][i]=min(rmq[len-1][i], rmq[len-1][i+(1 << (len-1))]);

    for(int i=1;i<=m;i++)
    {
        fin>>a>>b;
        int len=lg[b-a+1];
        fout<<min(rmq[len][a], rmq[len][b-(1 << len)+1])<<'\n';

    }
}
int main()
{
    read();
    preproc();
    solve();
    return 0;
}