Pagini recente » Cod sursa (job #90939) | Cod sursa (job #364672) | Cod sursa (job #3285274) | Cod sursa (job #2406505) | Cod sursa (job #3155161)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
long long v[100001],lg[100001];
long long ST[10001][10001];
void BuildST(long long v[],long long n){
for (int i = 0;i<n;++i){
ST[i][0] = v[i];
}
int k = lg[n];
for (int j = 1;j<=k;++j){
for(int i=0;i+(1<<j)-1<n;++i){
ST[i][j] = min(ST[i][j-1],ST[i+(1<<(j-1))][j-1]);
}
}
}
int query(int i, int j){
int len = j-i+1;
int k = lg[j - i + 1];
return min(ST[i][k], ST[i+len-(1<<k)][k]);
}
int main()
{
long long n,m;
fin >> n >> m;
for (int i=0;i<n;++i){
fin >> v[i];
}
for(int i=2; i<=10000; i++)
lg[i] = 1 + lg[i/2];
BuildST(v,n);
for (int i=1;i<=m;++i){
int s,f;
fin >> s >> f;
fout << query(s,f) << '\n';
}
return 0;
}