Pagini recente » Cod sursa (job #588503) | Cod sursa (job #929527) | Borderou de evaluare (job #208889) | Cod sursa (job #1325456) | Cod sursa (job #1218291)
#include <fstream>
#include <iostream>
using namespace std;
int N,M,a[100010],d[100010][18],ql,qr,MIN;
int main(){
ifstream in("rmq.in");
ofstream out("rmq.out");
in >> N >> M;
int i,j,x,y,l,k;
for (i=1; i<=N; i++){
in >> a[i];
d[i][0]=a[i];
}
for (j=1; (1<<j)<=N; j++)
for (i=1; i+(1<<j)-1<=N; i++){
d[i][j]=min(d[i][j-1],d[i+(1<<(j-1))][j-1]);
}
for (i=1; i<=M; i++){
in >> x >> y;
k=y-x+1; l=0;
while (k/(1<<l)>0) l++;
l--;
out << min(d[x][l],d[y-(1<<l)+1][l]) << "\n";
}
return 0;
}