Cod sursa(job #3288688)

Utilizator mihai_bosIancu Mihai mihai_bos Data 23 martie 2025 16:49:59
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <fstream>
#define INF 1000000000
using namespace std;
ifstream cin ("rmq.in");
ofstream cout("rmq.out");
int rmq[17][100010];
int E[100010];

int main() {
    int n, m, i, j;
    cin >> n >> m;
    for(i = 1; i <= n; ++i)
        cin >> rmq[0][i];
    E[1] = 0;
    for(i = 2; i <= n; ++i)
        E[i] = E[i/2] + 1;
    for(i = 1; (1 << i) <= n ; ++i)
    for(j = 1; j <= n; ++j) {
        rmq[i][j] = rmq[i-1][j];
        if(j + (1 << (i-1)) <= n)
            rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j + (1<< (i-1))]);
    }
    for(i = 1; i <= m; ++i) {
        int st, dr;
        cin >> st >> dr;
        int e =  E[dr-st+1];
        int len = (1 << e);
        cout << min(rmq[e][st], rmq[e][dr-len+1]) << '\n' ;
    }

    return 0;
}