Cod sursa(job #3185461)

Utilizator AlexandruDrg23Draghici Alexandru AlexandruDrg23 Data 18 decembrie 2023 21:37:48
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <iostream>
#include <vector>
#include <cmath>
#include <fstream>
using namespace std;

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

int ma[19][100002];
int lg[100002];


int main()
{
    lg[1]=0;
    int n,m;
    fin>>n>>m;
    for (int i=1;i<=n;i++)
		fin>>ma[0][i];
	lg[1]=0;
	for (int i=2;i<=n;i++)
		lg[i]=lg[i/2]+1;
    for(int k=1;(1<<k)<=n;k++)
    {
        int lu=(1<<k);
        int lu1=1<<(k-1);
        for(int c=1;c<=n-(lu)+1;c++)
            ma[k][c]=min(ma[k-1][c],ma[k-1][c+lu1]);
    }
    int l,j;
    int pu;
    for(int k=1;k<=m;k++)
    {
        fin>>l>>j;
        int lu=j-l+1;
        pu=lg[lu];
        fout<<min(ma[pu][l],ma[pu][j-(1<<lg[lu])+1])<<'\n';
    }
    return 0;
}