Cod sursa(job #2936785)

Utilizator oliv_1Bostinescu Octavian oliv_1 Data 9 noiembrie 2022 15:15:06
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.69 kb
#include <fstream>

using namespace std;

ifstream cin("rmq.in");
ofstream cout("rmq.out");

int sp[20][100005];
int vlog[100005];

void fsp(int n)
{
    for(int i=1;i<=vlog[n];i++)
    {
        for(int j=1;j<=n-(1<<(i))+1;j++)
            sp[i][j]=min(sp[i-1][j],sp[i-1][j+(1<<(i-1))]);
    }
}

int RMQ(int x,int y)
{
    int k=y-x+1;
    return min(sp[vlog[k]][x],sp[vlog[k]][y-(1<<vlog[k])+1]);
}

int main()
{
    int n,m,x,y;
    cin>>n>>m;
    for(int i=2;i<=n;i++)
        vlog[i]=1+vlog[i/2];
    for(int i=1;i<=n;i++)
        cin>>sp[0][i];
    fsp(n);
    for(int i=0;i<m;i++)
    {
        cin>>x>>y;
        cout<<RMQ(min(x,y),max(x,y))<<'\n';
    }
}