Cod sursa(job #2875530)

Utilizator and_Turcu Andrei and_ Data 21 martie 2022 20:09:04
Problema Range minimum query Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <bits/stdc++.h>
#define N 100007
#define M 1000007
using namespace std;


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

int n,q;
int a[28][N],v[M];
int e;/// rand max


void Citire()
{
    fin >> n >> q;
    for(int i=1;i<=n;i++)
        fin >> a[0][i];
}

void Generare()
{

    for(int i=1;(1<<i)<=n;i++)
        for(int j=1;j<=n;j++)
        {
            a[i][j]=a[i-1][j];
            int col=j+(1<<(i-1));
            if( col<=n and a[i-1][col]<a[i][j] )
                a[i][j]=a[i-1][col];
        }
    for(int i=2;i<=n;i++)v[i]=v[i/2]+1;

//////    for(int i=1;(1<<i)<=n;i++,cout <<"\n")
//////        for(int j=1;j<=n;j++)cout << a[i][j] <<" ";
}


int main()
{
    Citire();
    Generare();
    for(int i=1;i<=q;i++)
    {
        int st,dr;
        fin >> st >> dr;
        int ct=dr-st+1;
        int l=v[ct];
        int r=a[l][st];
        r=min(r,a[l][dr-l]);
        fout << r << "\n";

    }


    return 0;
}