Cod sursa(job #3337742)

Utilizator Andrei_GAndreiG Andrei_G Data 29 ianuarie 2026 18:44:41
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include <algorithm>
#include <climits>
#include <iomanip>
#include <numeric>
#include <bitset>
#include <string>
#include <vector>
#include <cmath>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#define int long long
//#define int short
#define f first
#define s second
using namespace std;

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

int n, q, v[100005], spt[100005][20], lg = 0;

void build(){
    for (int i = 1; i <= n; i++){
        spt[i][0] = v[i];
    }
    for (int j = 1; j <= lg; j++){
        for (int i = 1; (i + (1 << j) - 1) <= n; i++){
            spt[i][j] = min(spt[i][j - 1], spt[i + (1 << (j - 1))][j - 1]);
        }
    }
}

int query(int i, int j){
    int k = floor(log2(j - i + 1));
    return min(spt[i][k], spt[j + 1 - (1 << k)][k]);
}

signed main(){
    cin>>n>>q;
    lg = floor(log2(n));
    for (int i = 1; i <= n; i++){
        cin>>v[i];
    }
    build();
    while (q--){
        int x, y;
        cin>>x>>y;
        cout<<query(x, y)<<"\n";
    }
    return 0;
}