Pagini recente » Cod sursa (job #1389122) | Cod sursa (job #1075379) | Cod sursa (job #920033) | Cod sursa (job #2895635) | Cod sursa (job #3254594)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int rmq[100000][17];
int e[100000];
int main(){
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, m; fin>>n>>m;
for(int i=0; i<n; i++){
fin>>rmq[i][0];
}
for(int p=1; (1<<p)<=n; p++){
for(int i=0; i<n; i++){
rmq[i][p]=rmq[i][p-1];
int j=i+(1<<(p-1));
if(j<n){
rmq[i][p]=min(rmq[i][p], rmq[j][p-1]);
}
}
}
e[1]=0;
for(int i=2; i<n; i++){
e[i]=1+e[i/2];
}
for(int k=0; k<m; k++){
int st, dr; fin>>st>>dr; st--; dr--;
int exp=e[dr-st+1];
int rez=min(rmq[st][exp], rmq[dr-(1<<exp)+1][exp]);
fout<<rez<<endl;
}
return 0;
}