Pagini recente » Cod sursa (job #3149088) | Cod sursa (job #2468853) | Cod sursa (job #2327409) | Cod sursa (job #1241046) | Cod sursa (job #1892809)
#include <iostream>
#include <fstream>
#define MAX 100005
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n,log[MAX],v[MAX],rmq[20][MAX],m,a,b;
void build(){
for(int i=1;i<=n;++i)
rmq[0][i]=v[i];
for(int k=1;k<=log[n];++k)
for(int i=1;i+(1<<k)-1<=n;++i)
rmq[k][i]=min(rmq[k-1][i],rmq[k-1][i+(1<<(k-1))]);
}
int query(int a, int b){
int l=log[b-a+1];
return min(rmq[l][a],rmq[l][b-(1<<l)+1]);
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;++i)
fin>>v[i];
log[0]=-1;
for(int i=1;i<=n;++i)
log[i]=1+log[i/2];
build();
for(int i=1;i<=m;++i){
fin>>a>>b;
fout<<query(a,b)<<'\n';
}
return 0;
}