Cod sursa(job #3264146)

Utilizator Tudor28Ceclan Tudor Tudor28 Data 18 decembrie 2024 16:42:19
Problema Range minimum query Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int mat[100002][18];
int vec[100002];
int main()
{
    int n,m;
    fin>>n>>m;
    for(int i=1;i<=n;i++){
        fin>>mat[0][i];
    }
    vec[1]=0;
    for(int i=2;i<=n;i++){
        vec[i]=vec[i/2]+1;
    }



    for(int p=1;(1<<p)<=n;p++){
        for(int i=1;i<=n;i++){
            mat[p][i]=mat[p-1][i];
            int j = i +(1<<(p-1));
            if(j<=n && mat[p][i]>mat[p-1][j]){
                mat[p][i]=mat[p-1][j];
            }

        }
    }
    /*for(int p=0;(1<<p)<=n;p++){
        for(int i=1;i<=n;i++){
            fout<<mat[p][i]<< " ";

        }
        fout<<'\n';
    }
    fout<<'\n';*/
    while(m--){
        int st,dr;
        fin>>st>>dr;
        int dif=dr-st+1;
        int e = vec[dif];
        fout<<min(mat[e][st],mat[e][dr-(1<<e)+1])<<'\n';
    }

    return 0;
}