Pagini recente » Cod sursa (job #2863652) | Cod sursa (job #845964) | Cod sursa (job #746584) | Cod sursa (job #3223476) | Cod sursa (job #3237372)
#include <bits/stdc++.h>
using namespace std;
#define cin fin
ifstream fin("rmq.in");
#define cout fout
ofstream fout("rmq.out");
int r[1000][100002], i, j, p, len, e, m, st, dr, E[100002];
int mi(int st, int dr){
e=E[dr-st+1];
p=(1<<e);
int x=min(r[e][st], r[e][dr-p+1]);
if(x==r[e][st]) return r[e][st];
return r[e][dr-p+1];
}
int main(){
int n;
cin>>n;
cin>>m;
for(int i=1; i<=n; i++){
cin>>r[0][i];
}
for(p=1; (1<<p)<=n; p++){
for(int i=1; i<=n; i++){
r[p][i]=r[p-1][i];
j=i+(1<<(p-1));
if(j<=n && r[p-1][j]<r[p][i]){
r[p][i]=r[p-1][j];
}
}
}
E[1]=0;
for(int i=2; i<=n; i++){
E[i]=1+E[i/2];
}
for(int i=0; i<m; i++){
cin>>st>>dr;
cout<<mi(st, dr)<<"\n";
}
return 0;
}