Cod sursa(job #705497)

Utilizator dicu_dariaDaria Dicu dicu_daria Data 4 martie 2012 15:05:19
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <fstream>
#define MAXN 100010
using namespace std;
int log[MAXN],i,j,k,a[MAXN],M[MAXN][20],x,y,n,m;
int main()
{
    ifstream fi("rmq.in");
    ofstream fo("rmq.out");
    fi>>n>>m;
    for(i=1;i<=n;i++) { fi>>a[i]; M[i][0]=i; }
    for(i=2;i<=n;i++)
    log[i]=log[i/2]+1;
    for(k=1;(1<<k)<=n;k++)
        for(i=1;i<=n and i+(1<<k)-1<=n;i++)
        if(a[M[i][k-1]]<a[M[i+(1<<(k-1))][k-1]]) M[i][k]=M[i][k-1]; else
                                                    M[i][k]=M[i+(1<<(k-1))][k-1];
    for(i=1;i<=m;i++)
    {
        fi>>x>>y;
        k=y-x+1;
        fo<<min(a[M[x][log[k]]],a[M[y-(1<<log[k])+1][log[k]]])<<"\n";
    }
    return 0;
}