Cod sursa(job #3337501)

Utilizator Bucur_LauraBucur Laura Bucur_Laura Data 28 ianuarie 2026 10:30:39
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>

using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int rmq[100002][18];
int lg[100002];
// O(n log n + m )
int main()
{
  int n, m;
  fin>>n>>m;
  for (int i=1; i<=n; i++){
    fin>>rmq[i][0];  // elementele vectorului v[i]
  }
    // rmq[i][0]= minimul din secventa { v[i] } ( are 1 element  2^0 = 1)
    for(int j=1; (1<<j)<=n; j++)
      for (int i=1; i+(1<<j)-1<=n; i++)
           rmq[i][j]=min( rmq[i][j-1], rmq[i + ( 1<<(j-1) ) ][j-1] );
          // secventa care incepe v[i].. are 2^j elemente

    lg[1]=0;
    for(int i=2; i<=n; i++) lg[i]= 1+ lg[i/2];
    for (int i=1; i<=m; i++)
    {
      int x, y; fin>>x>>y;//  v[x]......v[y]
      int l=y-x+1;
      int p=lg[l];
      fout<<min(rmq[x][p], rmq[y-(1<<p)+1][p])<<'\n';
    }
    return 0;
}