Cod sursa(job #2718324)

Utilizator valentinchipuc123Valentin Chipuc valentinchipuc123 Data 8 martie 2021 17:44:42
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda no-time-to-rest Marime 0.65 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("rmq.in");
ofstream g("rmq.out");

int n,m,v[100005],rmq[100005][18],lg[100005];

int main()
{
 f>>n>>m;
 for(int i=1;i<=n;i++) f>>v[i];

 lg[1]=0;
 for(int i=2;i<=n;i++) lg[i]=lg[i/2]+1,rmq[i][0]=v[i];
 rmq[1][0]=v[1];

 for(int i=1;i<=lg[n];i++)
 {
  for(int j=1;j+(1<<i)-1<=n;j++)
  {
     rmq[j][i]=min( rmq[j][i-1],rmq[j + (1<<(i-1))][i-1] ) ;
  }
 }

 for(int i=1;i<=m;i++)
 {
  int a,b;
  f>>a>>b;
  if(b<a) swap(a,b);
  int lung=b-a+1;
  int putere=lg[lung];

  int sol=rmq[a][putere];
  sol=min( sol , rmq[a+( lung-(1<<putere) )][putere] );
  g<<sol<<'\n';
 }
}