Cod sursa(job #724104)

Utilizator algotrollNume Fals algotroll Data 26 martie 2012 11:09:32
Problema Range minimum query Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<fstream>
#include<algorithm>
#define _NM 100010
#define _TM 262144
const int INF=2147483647;
using namespace std;

int nA, A[_NM], tree[_TM];
int create_tree(int iNod, int le, int ri)
{
    if (le==ri) return tree[iNod]=A[le];
    return tree[iNod]=min(create_tree(iNod*2,le,(le+ri)/2), create_tree(iNod*2+1,(le+ri)/2+1,ri));
}

int qmin_tree(int iNod, int le, int ri, int i, int j)
{
    if (ri<i||le>j) return INF;
    if (le>=i&&ri<=j) return tree[iNod];
    return min(qmin_tree(iNod*2,le,(le+ri)/2,i,j),qmin_tree(iNod*2+1,(le+ri)/2+1,ri,i,j));
}

int main()
{
    ifstream fin("rmq.in");
    ofstream fout("rmq.out");
    int nOp; fin>>nA>>nOp;
    for (int i=1;i<=nA;i++) fin>>A[i];
    create_tree(1,1,nA);
    for (int i=1;i<=nOp;i++)
    {
        int a,b; fin>>a>>b;
        fout<<qmin_tree(1,1,nA,a,b)<<'\n';
    }
    return 0;
}