Cod sursa(job #2876120)

Utilizator MerlinTheWizardMelvin Abibula MerlinTheWizard Data 23 martie 2022 00:23:19
Problema Range minimum query Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include<iostream>
#include<fstream>
using namespace std;

ifstream f("rmq.in");
ofstream g("rmq.out");

int v[100001],m[100001][100];
int n,nr_query;

void Citire()
{
    f>>n>>nr_query;
    for(int i=0;i<n;i++)
    {
        f>>v[i];    
        m[i][0] = v[i];
    }
    for(int k=1;k<17;k++)
    {
        for(int i=0;i+(1<<k)-1<n;i++)
        {
            m[i][k]=min(m[i][k-1],m[i+(1<<(k-1))][k-1]);
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<=16;j++)
            cout<<m[i][j]<<" ";
        cout<<"\n";
    }
}

void Query(int st, int dr)
{
    int length  = dr - st + 1;
    int k=0;
    while((1<<(k+1))<=length)
    {
        k++;
    }
    g<<min(m[st][k],m[dr-(1<<k)+1][k])<<"\n";
}

int main()
{
    Citire();
    for(int i=1;i<=nr_query;i++)
    {
        int x,y;
        f>>x>>y;
        Query(x-1,y-1);
    }
}