Cod sursa(job #2781724)

Utilizator VladutzPredoiVlad Predoi VladutzPredoi Data 10 octombrie 2021 12:17:12
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <fstream>
using namespace std;


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


int n,m;
int v[100005];
int rmq[100005][20];


void solve()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        fin>>v[i];
    }
    for(int i=1;i<=n;i++)
    {
        rmq[i][0]=v[i];
    }
    for(int i=1;i<=17;i++)
    {
        for(int j=1; j<=n-(1<<i)+1;j++)
        {
            rmq[j][i]=min(rmq[j][i-1],rmq[j+(1<<(i-1))][i-1]);
        }
    }
    for(int i=1;i<=m;i++)
    {
        int x,y;
        fin>>x>>y;
        int l=y-x+1;
        int k=1;
        int p=1;
        while(k<=l)
        {
            k*=2;
            p++;
        }
        k/=2;
        fout<<min(rmq[x][p],rmq[y-k+1][p])<<"\n";
    }
}


int main()
{
    solve();
    return 0;
}