Pagini recente » Cod sursa (job #667972) | Cod sursa (job #2690497) | Cod sursa (job #2519672) | Cod sursa (job #3036550) | Cod sursa (job #677291)
Cod sursa(job #677291)
#include<fstream>
#include<math.h>
#define lim 100001
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n,m,h,po[lim],A[lim],i,j,t[20][lim];
int min(int a,int b){
if(a<b)
return a;
return b;
}
void read(){
f>>n>>m;
for(i=1;i<=n;i++){
f>>t[0][i];
}
}
void precalculare(){
for(i=2;i<=lim;++i)
po[i]=po[i/2]+1;
}
void rmq(){
for(i=1;(1<<i)<=n;++i){
for(j=1;j+(1<<i)-1<=n;++j){
t[i][j]=min(t[i-1][j],t[i-1][j+(1<<(i-1))]);
}
}
}
void print(){
int a,b;
for(i=1;i<=m;i++){
f>>a>>b;
h=po[b-a+1];
g<<min(t[h][a],t[h][b+1-(1<<h)])<<"\n";
}
}
int main (){
read();
precalculare();
rmq();
print();
return 0;
}