Cod sursa(job #2844781)

Utilizator Diana_IonitaIonita Diana Diana_Ionita Data 5 februarie 2022 14:00:02
Problema Range minimum query Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.63 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int i,n,k,m,j,p,r,x,y;
int rmq[10001][10001];
int v[1001];
void precalc()
{
    for(i=1; i<=n; i++)rmq[0][i]=v[i];
    for(k=1; 1<<k<=n; k++)
    {
        j=1<<k;
        for(i=1; i<=n-j+1; i++)
        {
            rmq[k][i]=min(rmq[k-1][i],rmq[k-1][i+j/2]);
        }
    }

}
int main()
{
    fin>>n>>m;
    for(i=1; i<=n; i++)fin>>v[i];
    precalc();
    for(i=1; i<=m; i++)
    {
        fin>>x>>y;
        r=log2(y-x+1);

        fout<<min(rmq[r][y-(1<<r)+1],rmq[r][x])<<'\n';
    }
    return 0;
}