Cod sursa(job #3036810)

Utilizator BuruianaRaresAndreiBuruiana Rares Andrei BuruianaRaresAndrei Data 25 martie 2023 10:06:40
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#include <cmath>
#define NMAX 100002

using namespace std;

ifstream cin("rmq.in");
ofstream cout("rmq.out");

int n, q, crt, val, x;
int st, dr, lg;
int mat[20][NMAX];

int main()
{
 ios_base::sync_with_stdio(false);
 cin.tie(0); cout.tie(0);

 int i, j;
 cin >> n >> q;
 for(i = 1; i <= n; i++)
     cin >> mat[1][i];
 crt = 1; val = (int) log2(n); val++;
 for(i = 2; i <= val; i++, crt *= 2)
    {
     for(j = 1; j <= n - crt; j++)
         mat[i][j] = min(mat[i - 1][j], mat[i - 1][j + crt]);
    }

 /*for(i = 1, crt = 1; i <= val; i++, crt *= 2)
    {
     for(j = 1; j <= n - crt; j++)
         cout << mat[i][j] << ' ';
     cout << '\n';
    }*/

 while(q--)
      {
       cin >> st >> dr;
       lg = dr - st + 1;
       val = (int) log2(lg); val++;
       x = 1 << (val - 1);
       ///cout << st << ' ' << dr << ' ' << val << ' ' << x << '\n';
       cout << min(mat[val][st], mat[val][dr - x + 1]) << '\n';
      }
 return 0;
}