Cod sursa(job #2907216)

Utilizator simonatudoroiuTudoroiu Simona simonatudoroiu Data 29 mai 2022 12:49:33
Problema Range minimum query Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>
#include <vector>
#include <cmath>
#define size 100000
#define logsize 17
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
long long n,m,op,j,v[100001],mt[size][logsize];
long long query(long long st,long long dr)
{
    long long s = dr-st+1,nr = 0;
    nr = (long long )log2(s);
    return min(mt[st][nr], mt[dr - (long long )pow(2, nr) + 1][nr]);
}
int main()
{
    fin >> n >> m;
    long long i;
    for(i = 0;i<n;i++)
    {
        fin >> v[i];
        mt[i][0] = v[i];

    }
    for(j = 1;j<=logsize;j++)
        for(i = 0;i+ (long long ) pow(2,j)-1<n;i++)
            mt[i][j] = min(mt[i][j - 1], mt[i + (long long) pow(2, (j - 1))][j - 1]);
    long long a,b;
    for(i = 0;i<m;i++)
    {
        fin >> a >> b;
        fout << query(a - 1, b - 1) << '\n';
    }
    fin.close();fout.close();
}