Cod sursa(job #2521325)

Utilizator AndreiDeltaBalanici Andrei Daniel AndreiDelta Data 10 ianuarie 2020 19:08:39
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#include <bits/stdc++.h>
#define Dim 100001
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int N,M,dp[Dim][20],x,y,V[Dim],ans;


int main()
{
    f>>N>>M;
    for(int i=1;i<=N;i++)
    {
        f>>V[i];
        dp[i][0]=i;
    }

    for(int j=1;j<=log2(N);j++)
    for(int i=1;i+(1<<j)-1<=N;i++)
    if( V[ dp[ i ][ j - 1 ] ] < V[ dp[ i + ( 1<<(j-1) ) ][ j - 1 ] ] )
    dp[i][j]=dp[i][j-1];
    else
    dp[i][j]=dp[i + ( 1<<(j-1) ) ][ j - 1 ];

    for(int i=1;i<=M;i++)
    {
        f>>x>>y;
        int lg=y-x+1;
        int p=log2(lg);
        ans=min( V[ dp[ x ][ p ] ] , V[ dp[ y - ( 1<<p ) + 1 ][ p ] ] );
        g<<ans<<'\n';
    }



    return 0;
}