Cod sursa(job #2238881)

Utilizator cristinaandrei10Andrei Cristina cristinaandrei10 Data 8 septembrie 2018 10:44:22
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <fstream>

using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
const int N = 17;
const int M = 1<<17;
int n,q,i,st,dr,mi,p,a[N][M],L[M],lg,sol;
int main()
{
    f>>n>>q;
    for(i=1;i<=n;i++)
        f>>a[0][i];
    for(i=1;(1<<i)<=n;i++)
    {
        st=1;dr=(1<<i);mi=dr/2+1;
        for(;dr<=n;st++,mi++,dr++)
            a[i][st]=min(a[i-1][st],a[i-1][mi]);
    }
    for(i=2;i<=n;i*=2)
        L[i]=1;
    for(i=1;i<=n;i++)
        L[i]+=L[i-1];
    for(;q;q--)
    {
        f>>st>>dr;
        lg=dr-st+1;
        i=L[lg];
        p=1<<i;
        sol=min(a[i][st],a[i][dr-p+1]);
        g<<sol<<'\n';
    }
    return 0;
}