Pagini recente » Cod sursa (job #365685) | Cod sursa (job #2927199) | Cod sursa (job #80620) | Cod sursa (job #3305940) | Cod sursa (job #3330080)
#include <bits/stdc++.h>
using namespace std;
int n,m;
vector<vector<int>> v;
int main() {
ifstream cin("rmq.in");
ofstream cout("rmq.out");
cin>>n>>m;
vector<int> log(1e5 + 1);
log[1] = 0;
for(int i=2;i<=1e5;i++)
log[i] = log[i/2] + 1;
vector<int> pow2(log[n]+1);
pow2[0] = 1;
for(int i=1;i<=log[n];i++)
pow2[i] = pow2[i-1] * 2;
v.resize(n+1,vector<int>(log[n]+1));
for(int i=1;i<=n;i++)
cin>>v[i][0];
int pow = 1;
for(int j=1;j<=log[n];j++){
pow *= 2;
for(int i=1;i<=n-pow/2;i++)
v[i][j] = min(v[i][j-1],v[i+pow/2][j-1]);
}
for(int i=1;i<=m;i++){
int l,r;
cin>>l>>r;
int range = r - l + 1;
int fi = v[l][log[range]];
int si = v[r-pow2[log[range]]+1][log[range]];
cout<<min(fi,si)<<"\n";
}
}