Pagini recente » Cod sursa (job #985281) | Cod sursa (job #2327369) | Cod sursa (job #1305751) | Cod sursa (job #1784820) | Cod sursa (job #3037524)
#include <fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int i, j, n, m, lg, e, x, y;
int r[20][100002], v[100002], exp[100002];
int main(){
cin>>n>>m;
for(i=1;i<=n;i++){
cin>>v[i];
r[0][i]=v[i];
}
for(lg=1;(1<<lg)<=n;lg++){
for(i=1;i<=n;i++){
r[lg][i]=r[lg-1][i];
if(i+(1<<(lg-1))<=n)
r[lg][i]=min(r[lg][i], r[lg-1][i+(1<<(lg-1))]);
}
}
exp[1]=0;
for(i=2;i<=n;i++)
exp[i]=exp[i/2]+1;
while(m--){
cin>>x>>y;
lg=y-x+1;
e=exp[lg];
cout<<min(r[e][x], r[e][y-(1<<e)+1])<<"\n";
}
}