Pagini recente » Cod sursa (job #1417881) | Cod sursa (job #1434929) | Cod sursa (job #1907389) | Cod sursa (job #1498425) | Cod sursa (job #3001551)
#include <fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
const int MAX = 1e5 + 1;
int rmq[18][MAX] , n , q , lg[MAX] , a , b;
int main(){
//rmq[i][j] = minimul din intervalul care se termina cu j si are lungimea (1<<i)
cin >> n >> q;
lg[0] = -1;
for(int i = 1 ; i <= n ; i++){
cin >> rmq[0][i];
lg[i] = lg[i/2] + 1;
}
for(int i = 1 ; i <= lg[n] ; i++){
for(int j = (1<<i) ; j <= n ; j++){
rmq[i][j] = min(rmq[i-1][j],rmq[i-1][j-(1<<(i-1))]);
}
}
while(q--){
cin >> a >> b;
int l = b-a+1;
l = lg[l];
cout << min(rmq[l][b],rmq[l][a+(1<<l)-1]) << '\n';
}
return 0;
}