Cod sursa(job #2531845)

Utilizator RedXtreme45Catalin RedXtreme45 Data 26 ianuarie 2020 19:56:02
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>
#include <cmath>
#define Nmax 100001
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n,m,x,dp[20][Nmax];
int main()
{
    int i,j,a,b;
    fin>>n>>m;
    for (i=1;i<=n;i++)
    {
        fin>>dp[0][i];
    }
    int o=n;
    while (o!=0)
    {
        o/=2;
        x++;
    }
    for (i=1;i<=x;i++)
    {
        for (j=1;j<=n-(1<<i)+1;j++)
        {
            dp[i][j]=min(dp[i-1][j],dp[i-1][j+(1<<(i-1))]);
        }
    }
   for (i=1;i<=m;i++)
   {
       fin>>a>>b;
       int l=b-a+1;
       x=0;
       while ((1<<x)<=l)
       {
           x++;
       }
       x--;

       fout<<min(dp[x][a],dp[x][b-(1<<x)+1])<<"\n";
   }
    return 0;
}