Cod sursa(job #2906470)

Utilizator tescovschimarioTescovschi Mario tescovschimario Data 26 mai 2022 09:33:57
Problema Range minimum query Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin ("rmq.in");
ofstream cout ("rmq.out");
int n, m[10000][10000], q, x, y, a[10000];

int query(int x, int y)
{
    int len;
    len = y - x + 1;
    int l;
    l = log2(len);
     return min( m[x][l], m[y - (1 << l) + 1][l]);
}

void sparse_table() {
    for(int j = 1;  j <= log2(n) ; j++)
        for(int i = 1; i <= n - (1 << j) + 1; i++)
            m[i][j] = min(m[i][j-1], m[i + (1 << (j-1))][j-1]);
}
int main(){
    cin >> n >> q;
    for(int i = 1 ; i <= n; i++) {
        cin >> a[i];
        m[i][0] = a[i];
    }
    sparse_table();


  /* for(int i = 0; i < n; i++, cout << endl)
        for(int j = 0; j < n; j++)
            cout << m[i][j] << " ";
*/

     for(int i = 1; i <= q; i++) {
        cin >> x >> y;
        cout << query(x, y) << endl;
    }

    return 0;
}