Cod sursa(job #563551)

Utilizator bacilaBacila Emilian bacila Data 25 martie 2011 13:30:20
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.62 kb
#include<fstream>
#define N_MAX 100011
#define Log2N_MAX 17

using namespace std;
int v[N_MAX][Log2N_MAX],n,i,j,x,y,m,k;
int mini(int q,int w)
{
    if(q<w)
        return q;
    return w;
}

int main()
{
    ifstream f("rmq.in");
    f>>n>>m;
    for(i=1;i<=n;i++)
	   f>>v[i][0];
    ofstream g("rmq.out");
    for(i=1;(1<<i)<=n;i++)
	   for(j=1; j+(1<<(i)) <=n;j++)
	       v[j][i]=mini(v[j][i-1],v[j+(1<<(i-1))][i-1]);
    for(i=1;i<=m;i++)
    {	
        f>>x>>y;
        k=31-__builtin_clz(y-x+1);
        g<<mini(v[x][k],v[y-(1<<k)+1][k])<<'\n';
    }
    f.close(); g.close();
    return 0;
}