Cod sursa(job #2582383)

Utilizator alex_benescuAlex Ben alex_benescu Data 16 martie 2020 17:46:21
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.59 kb
#include <fstream>
std::ifstream f("rmq.in");
std::ofstream g("rmq.out");
int n, t, rmq[20][100005], log[100005], x, y;
int main(){
  int i, j, l, e;
  f>>n>>t;
  for(i=1; i<=n; i++)
    f>>rmq[0][i];
  for(i=2; i<=n; i++)
    log[i]=1+log[i/2];
  for(i=1; i<=log[n]; i++){
    for(j=1; j<=n; j++){
      rmq[i][j]=rmq[i-1][j];
      e=i-1;
      if(j+(1<<e)<= n && rmq[i-1][j+(1<<e)]<rmq[i][j])
        rmq[i][j]=rmq[i-1][j+(1<<e)];
    }
  }
  while(t--){
    f>>x>>y;
    l=y-x+1;
    e=log[l];
    g<<std::min(rmq[log[l]][x], rmq[log[l]][y-(1<<e)+1])<<'\n';
  }
  return 0;
}