Cod sursa(job #3254122)

Utilizator c0drinn_Rau Codrin c0drinn_ Data 6 noiembrie 2024 10:48:26
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream fin("rmq.in");
ofstream fout("rmq.out");
  int rmq[100001][17], log2[100001];


 int main(){
   int n, m;
   fin >>n>>m;
   for(int i = 1; i<=n; i++)
    fin >> rmq[i][0]; // a[i] este minimul pe secventa cu 1 element


   //  logaritmi
   log2[1]=0;
   for(int i=2; i<=n; i++)
    log2[i]=log2[i>>1]+1;
   // rmq
   for(int j = 1; (1<<j) <= n; j++){ // intervale de lungime 2^j
     for(int i =1 ; i + (1<<j)-1 <= n; i++ ) // a[i].......a[?]  ........a[i+1^j -1]
      rmq[i][j] = min(rmq[i][j-1], rmq[i+(1<<j-1)][j-1]);
   }
   // cerinte
   for( int i=1; i<=m; i++){
     int x,y;
     fin>>x>>y; // a[x]...........a[y]
     int l=y-x+1;
     l=log2[l];  //  rmq[??][l]
    fout<< min( rmq[ x ][ l ] , rmq[y - (1<<l)  +1][l] )<<'\n';

   }


  return 0;
}