Pagini recente » Cod sursa (job #2707959) | Cod sursa (job #2326384) | Cod sursa (job #2226691) | Cod sursa (job #2290291) | Cod sursa (job #2961578)
#include <set>
#include "cmath"
#include "iostream"
#include "algorithm"
using namespace std;
/**ifstream cin("in.in");
ofstream cout("out.out");**/
int n, m, rmq[100002][17], a[100002] ;
void preprocess()
{
for (int i = 1 ; i <= n ; i ++)
rmq[i][0] = i ;
for (int j = 1 ; (1 << j) <= n ; j ++)
for (int i = 0 ; i + (1 << j) - 1 <= n ; i ++) {
if (a[rmq[i][j - 1]] < a[rmq[i + (1 << (j - 1))][j - 1]])
rmq[i][j] = rmq[i][j - 1];
else
rmq[i][j] = rmq[i + (1 << (j - 1))][j - 1] ;
}
}
int Query(int l, int r)
{
int k = log2(r - l + 1) ;
return min(a[rmq[l][k]] , a[rmq[r - (1 << k) + 1][k]]) ;
}
int main()
{
int x, y ;
cin >> n >> m ;
for (int i = 1 ; i <= n ; i ++)
cin >> a[i] ;
preprocess() ;
for (int i = 0; i < m; ++i) {
cin >> x >> y ;
cout << Query (x, y) << '\n' ;
}
return 0 ;
}