Cod sursa(job #2708527)

Utilizator rARES_4Popa Rares rARES_4 Data 18 februarie 2021 20:39:56
Problema Range minimum query Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include<cmath>
#include <fstream>
using namespace std;
ifstream f ("rmq.in");
ofstream g ("rmq.out");
int n,m;
int v[100001];
int dp[100001][20];
int main()
{
    f >> n >> m;
    for(int i = 1;i<=n;i++)
    {
        f >> v[i];
    }
    for(int i = 1;i<=n;i++)
        dp[i][0] = i;
    for(int j = 1;(1<<j)<=n;j++)
    {
        int linie_mx = n + 1 - (1<< j);
        for(int i = 1;i<=linie_mx;i++)
        {
            if(v[dp[i][j-1]] < v[dp[i+(1<<(j-1))][j-1]])
                dp[i][j] = dp[i][j-1];
            else
                dp[i][j] = dp[i+(1<<(j-1))][j-1];
        }
    }
    int st,dr;
    for(int i = 1;i<=m;i++)
    {

        f >> st >> dr;
        int  l = dr- st +1;
        int lgn = log2(l);
        int rasp = min(v[dp[st][lgn]],v[dp[dr- (1<<lgn)+1][lgn]]);
        g << rasp<< endl;
    }

}