Cod sursa(job #2428875)

Utilizator MortemPlaiasu Iulia-Silvia Mortem Data 6 iunie 2019 18:36:14
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.64 kb
#include <iostream>
#include <fstream>
std::ifstream fin("rmq.in");
std::ofstream fout("rmq.out");
int rm[100500][20];
int v[100500];
int n,m;

int logg(int x)
{
  if(x!=0)
    return 1+logg(x/2);
  return -1;
}

int main()
{
  fin>>n>>m;
  for(int i=0;i<n;i++)
  {
    fin>>v[i];
    rm[i][0]=v[i];
  }
  int pow2=1;
  for(int j=1;pow2<=n;j++,pow2=pow2*2)
    for(int i=0;i<n;i++)
    {
      if(i+pow2 >=n) rm[i][j]=rm[i][j-1];
      else rm[i][j]=std::min(rm[i][j-1],rm[i+pow2][j-1]);
    }
  for(int i=0;i<m;i++)
  {
    int a,b;
    fin>>a>>b;
    int k= logg(b-a+1);
    int poww = 1<<k;
    fout<<std::min(rm[a-1][k],rm[b-poww][k])<<"\n";
  }
}