Cod sursa(job #3359005)

Utilizator Zeno1789Zeno Ciuca Zeno1789 Data 22 iunie 2026 20:26:12
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>
#include <algorithm>
using namespace std;

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

int rmq[100005][18],lg[100005];

int main() {
    int n,m;
    cin>>n>>m;
    lg[1]=0;
    for (int i=2; i<=n; ++i) {
        lg[i]=lg[i/2]+1;
    }
    for (int i=1; i<=n; ++i) {
        cin>>rmq[i][0];
    }
    for (int j=1; (1<<j)<=n; ++j) {
        for (int i=1; i+(1<<j)-1<=n; ++i) {
            rmq[i][j]=min(rmq[i][j-1],rmq[i+(1<<(j-1))][j-1]);
        }
    }
    for (int i=0; i<m; ++i) {
        int x,y;
        cin>>x>>y;
        if (x>y) swap(x,y);
        int len=y-x+1;
        int k=lg[len];
        cout<<min(rmq[x][k],rmq[y-(1<<k)+1][k])<<"\n";
    }
    return 0;
}