Cod sursa(job #2853129)

Utilizator rARES_4Popa Rares rARES_4 Data 19 februarie 2022 22:06:23
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("rmq.in");
ofstream g ("rmq.out");
int n,m;
int v[100001];
int dp[100001][31];
void citire()
{
    f >> n >> m;
    for(int i = 1;i<=n;i++)
    {
        int x;
        f >> v[i];
        dp[i][0]=i;
    }

}
void calc()
{
    int lungime = log2(n)+1;
    for(int j = 1;j<=lungime;j++)
    {
        for(int inceput = 1;inceput+(1<<j)-1<=n;inceput++)
        {
            if(v[dp[inceput][(j-1)]]<v[dp[inceput+1<<(j-1)][(j-1)]])
            {
                dp[inceput][j] = dp[inceput][(j-1)];
            }
            else
                dp[inceput][j] = dp[inceput+1<<(j-1)][(j-1)];
        }
    }
}
int gasire_rasp(int a ,int b)
{
    int l = b-a+1;
    l  =log2(l);
    return min(v[dp[a][l]],v[dp[b-(1<<l)+1][l]]);
}
int main()
{
    citire();
    calc();
    for(int i = 1;i<=m;i++)
    {
        int a,b;
        f >> a >> b;
        g << gasire_rasp(a,b)<< '\n';
    }
}