Pagini recente » Cod sursa (job #3257453) | Cod sursa (job #714737) | Cod sursa (job #93007) | Cod sursa (job #3273102) | Cod sursa (job #2812649)
#include <fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
#define NMAX 100'001
#define LOG 18
int n, q, rmq[NMAX][LOG], a[NMAX];
int Raspuns(int st, int dr);
int main(){
cin >> n >> q;
for(int i = 1; i <= n; ++ i){
cin >> a[i];
rmq[i][0] = a[i];
}
for(int k = 1; (1 << k) <= n; ++ k)
for(int i = 1; i + (1 << k) - 1 <= n; ++ i)
rmq[i][k] = min(rmq[i][k - 1], rmq[i + (1 << (k - 1))][k - 1]);
for(int st, dr, i = 1; i <= q; ++ i){
cin >> st >> dr;
cout << Raspuns(st, dr) << '\n';
}
return 0;
}
int Raspuns(int st, int dr){
int lungime = (dr - st) + 1;
int k = 0;
while((1 << (k + 1)) <= lungime)
k ++;
return min(rmq[st][k], rmq[dr - (1 << k) + 1][k]);
}