Cod sursa(job #2223724)

Utilizator teodorgTeodor G teodorg Data 21 iulie 2018 11:59:46
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <bits/stdc++.h>

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