Cod sursa(job #2391772)

Utilizator alexdumitrescuDumitrescu George Alex alexdumitrescu Data 29 martie 2019 10:58:58
Problema Range minimum query Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
#define Nmax 100005
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int n, q, m[Nmax][30], a[Nmax], i, j, x, y, k, lg;
int main()
{
    fin >> n >> q;
    for(i=1; i<=n; i++)
        fin >> a[i];
    for(i=1; i<=n; i++)
        m[i][0]=i;
    for(j=1; (1<<j) <= n ; j++)
        for(i=1; i+j-1 <=n ; i++)
            {
                if(a[m[i][j-1]]<a[m[i+(1<<(j-1))][j-1]])
                    m[i][j]=m[i][j-1];
                else
                    m[i][j]=m[i+(1<<(j-1))][j-1];
            }
    for(i=1; i<=q; i++)
    {
        fin >> x >> y;
        k=0;
        lg=y-x+1;
        while(lg >= 2)
        {
            lg=lg>>1;
            k++;
        }
        fout << min (a[m[x][k]], a[m[y-(1<<k)+1][k]]) << '\n';
    }
    return 0;
}