Cod sursa(job #2174463)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 16 martie 2018 12:10:47
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
# include <fstream>
# define DIM 100010
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int d[20][DIM],lg[DIM],p[20],n,m,i,j,np,st,dr;
int main () {
    fin>>n>>m;
    for(i=1;i<=n;i++)
        fin>>d[0][i];
    p[0]=1;
    for(i=2;i<=DIM-5;i++){
        lg[i]=lg[i/2]+1;
        if(lg[i]>lg[i-1])
            p[++np]=i;
    }
    np++;
    p[np]=p[np-1]*2;
    for(j=1;p[j]<=n;j++)
        for(i=1;i<=n;i++)
            d[j][i]=min(d[j-1][i],d[j-1][i+p[j-1]]);
    for(i=1;i<=m;i++){
        fin>>st>>dr;
        if(st>dr)
            swap(st,dr);
        fout<<min(d[lg[dr-st+1]][st],d[lg[dr-st+1]][dr-p[lg[dr-st+1]]+1])<<"\n";
    }
    return 0;
}