Cod sursa(job #2752655)

Utilizator stefan.m.soare@gmail.comstefan soare [email protected] Data 18 mai 2021 20:08:59
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>

using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");

int const MAX=1e5+3;
int a[MAX];
int mat[MAX][19];
int n,m;

int query(int x,int y)
{
    int lung=y-x+1;

    int k =0;



    while((1<<k) <= lung)
        ++k;

   int pow=k-1;


   return min(mat[x][pow+1],mat[y-(1<<(pow))+1][pow+1]);
}

int main()
{
    fin>>n>>m;


    for(int i =1; i <= n; ++i)
    {
        fin>>a[i];
        mat[i][1]=a[i];

    }


    for(int j =2; j <= 17; ++j)
        for(int i =1; i+ (1<<(j-2)) <= n; ++i){
            mat[i][j]=min(mat[i][j-1],mat[i+(1<<(j-2))][j-1]);
        }

    for(int i =1; i <= m ; ++i)
    {
        int x ,y;
        fin>>x>>y;

        fout<<query(x,y)<<"\n";
    }


    return 0;
}