Cod sursa(job #3181179)

Utilizator Federica361Martinut Federica Federica361 Data 6 decembrie 2023 16:55:42
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#include <bits/stdc++.h>

using namespace std;

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

#define cin fin
#define cout fout

int n,m,i,j,x,y,z,nr,p,rmq[100005][20],lg;

int main()
{
    cin>>n>>m;
    for(i=1;i<=n;i++)
    {
        cin>>x; rmq[i][0]=x;
    }
    lg=1;
    for(j=1;lg*2<=n;j++)
    {
        lg*=2;
        for(i=1;i<=n-lg+1;i++)
        {
            rmq[i][j]=min(rmq[i][j-1],rmq[i+lg/2][j-1]);

        }
    }
    for(i=1;i<=m;i++)
    {
        cin>>x>>y;
        z=y-x+1;
        p=1; nr=0;
        while(p<=z)
        {
            p*=2; nr++;
        }
        nr--;
        cout<<min(rmq[x][nr],rmq[y-p/2+1][nr])<<"\n";
    }
    return 0;
}