Pagini recente » Cod sursa (job #2075122) | Cod sursa (job #3233421) | Cod sursa (job #1814251) | Cod sursa (job #2329887) | Cod sursa (job #3279503)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
vector<vector<int>>rmq(18,vector<int>(100005,1e9));///puteri dupa lungime
vector<int>a;
void build() {
for(int i=1; i<(int)(a.size()); i++)
rmq[0][i] = a[i];
for(int i=1; i<=17; i++)
for(int j=1; j + (1 << i)<(int)(a.size()); j++) {
rmq[i][j] = min(rmq[i-1][j],rmq[i-1][j + (1 << (i-1))]);
}
}
int query(int l,int r) {
int mn = 1e9;
for(int i=17; i>=0; i--) {
if((1<<i) <= r-l+1) {
mn = min(mn,rmq[i][l]);
l += (1 << i);
}
}
return mn;
}
int main() {
int n,m;
fin>>n>>m;
a.resize(n+2);
for(int i = 1;i<=n;i++)
fin>>a[i];
build();
for(int i=1;i<=m;i++){
int x,y;
fin>>x>>y;
fout<<query(x,y)<<'\n';
}
return 0;
}