Pagini recente » Cod sursa (job #368276) | Cod sursa (job #1886701) | Cod sursa (job #14393) | Cod sursa (job #2699657) | Cod sursa (job #2393796)
#include <bits/stdc++.h>
#define DM 100005
#define logN 17
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int rmq[DM][logN],v[DM],n,m,a,b;
void construct(){
for(int i=1;i<=n;++i) rmq[i][0]=i;
for(int j=1;(1<<j)<=n;++j) for(int i=1;i<=n;++i){
if(v[ rmq[i][j-1] ] < v[ rmq[i+(1<<(j-1))][j-1] ]) rmq[i][j]=rmq[i][j-1];
else rmq[i][j]=rmq[i+(1<<(j-1))][j-1];
}
}
void getAns(){
int logDist = log2(b-a+1);
int x1 = rmq[a][logDist];
int x2 = rmq[b-(1<<logDist)+1][logDist];
fout<<min(v[x1],v[x2])<<'\n';
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;++i)
fin>>v[i];
construct();
while(m--){
fin>>a>>b;
getAns();
}
return 0;
}