Cod sursa(job #1690817)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 15 aprilie 2016 21:16:27
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
# include <fstream>
# define DIM 100010
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int m[25][DIM],v[DIM],p[DIM],lg[25],n,i,j,a,b,m1,st,dr;
int main () {
    fin>>n>>m1;
    for(i=1;i<=n;i++){
        fin>>v[i];
        m[0][i]=v[i];
    }
    lg[0]=1;
    for(i=1;i<=20;i++)
        lg[i]=lg[i-1]*2;
    for(i=2;i<=n;i++)
        p[i]=p[i/2]+1;
    for(i=1;i<=p[n];i++)
        for(j=1;j<=n;j++)
            if(j+lg[p[i-1]]<=n)
                m[i][j]=min(m[i-1][j],m[i-1][j+lg[p[i-1]]]);
    for(i=1;i<=m1;i++){
        fin>>st>>dr;
        a=p[dr-st+1];
        b=lg[a];
        fout<<min(m[a][st],m[a][dr-b+1])<<"\n";
    }
    return 0;
}