Cod sursa(job #2205663)

Utilizator HumikoPostu Alexandru Humiko Data 19 mai 2018 20:23:09
Problema Lowest Common Ancestor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>
#define lim 100010

using namespace std;

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

int v[lim], logaritm[lim], dp[lim][30], n, m;

int main()
{
    fin>>n>>m;
    for ( int i = 1; i <= n; ++i )
        fin>>v[i];
    for ( int i = 2; i <= n; ++i )
        logaritm[i] = logaritm[i/2]+1;
    for ( int i = 1; i <= n; ++i )
        dp[i][0] = min(v[i], v[i+1]);
    for ( int i = 1; i <= logaritm[n]; ++i )
    {
        for ( int j = 1; j <= n; ++j )
        {
            if ( j+(1<<i) > n )
                break;
            dp[j][i] = min (dp[j][i-1], dp[j+(1<<(i-1))][i-1]);
        }
    }
    for ( int i = 1; i <= m; ++i )
    {
        int x, y;
        fin>>x>>y;
        if ( x == y )
            fout<<v[x]<<'\n';
        else
            fout<<min(dp[x][logaritm[y-x]], dp[y-(1<<logaritm[y-x])][logaritm[y-x]])<<'\n';
    }

}